首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >条件明细表的数据库设计

条件明细表的数据库设计
EN

Database Administration用户
提问于 2013-06-17 12:13:09
回答 3查看 1.1K关注 0票数 2

我有一个每月开支管理系统。费用分为两类:一次每月的开支和一天的每日开支.我创建了以下表格:

代码语言:javascript
复制
setupExpenses (ExpenseID, Title, IsDaily)
ExpenseMaster (ExpenseMasterID, Month, EmployeeID)
ExpenseDetails (ExpDetID, ExpenseMasterID, ExpenseID, Date, Amount)
ExpenseDetailsDaily(ID, ExpDetID, Date, Amount)

如果isdailysetupExpenses中是true,那么在第三个表中就有一个条目,否则我在另外两个事务表中有条目。如果有更好的建议,我们将不胜感激。我觉得这个设计不对。

EN

回答 3

Database Administration用户

发布于 2013-06-17 13:30:06

在不了解更多业务需求的情况下,在您定义的给定结构下,我可能会使用以下内容:

代码语言:javascript
复制
Expense (Id, DetId, TypeId, Amount, Date, EmployeeId)
ExpenseType (Id, Name)

其中Expense.TypeIdExpenseType.Id的外键约束。ExpenseType可以包含每日或每月开支的行。这是可伸缩的,就好像你需要每周或每年的开支(等等)一样。那么,这种正常化就会受益。Expense.EmployeeId将是您的employee表的外键约束,而Expense.DetId听起来像是对另一个表的外键约束,而我似乎无法从列名中转换它。如果只是每个费用的详细信息,那么没有理由不直接将其放在Expense表中(在费用和费用细节之间提供了1:1的关系)。我可能少了几个专栏,但我相信你会明白的。

票数 3
EN

Database Administration用户

发布于 2013-06-17 12:14:28

您可以尝试下面的scehema,这样可以避免一个表和重复的数据

代码语言:javascript
复制
ExpenseMaster (ExpenseMasterID, Month, EmployeeID, IsDaily)
ExpenseDetails (ExpDetID, ExpenseMasterID, Date, Amount)
ExpenseDetailsDaily(ID, ExpDetID, Date, Amount)
票数 0
EN

Database Administration用户

发布于 2013-06-17 13:00:27

第一个表需要一个更一致的名称。而且,表名通常是单数的。

代码语言:javascript
复制
ExpenseSetup
------------
ExpenseSetupID
Title
ExpenseOccurrence


ExpenseMaster
-------------
ExpenseMasterID
EmployeeID
ExpenseSetupID


ExpenseDetail
-------------
ExpenseDetailID
ExpenseMasterID
ExpenseDate
Amount

我不明白为什么每天的开支要放在另一张桌子上。您可以通过连接回ExpenseSetup表来获取开销。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/44670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档