2013-05-04 216 views
0

这是我的第一个数据库模式设计。我正在为我的部门开发一个小型Web应用程序,用于食品成本管理。我正在为了我的学习目的而这样做。设计我的第一个数据库模式:需要建议

如何食品成本管理的作品在我的部门:

  1. 共有成员:15
  2. 一个管理员把所有的费用记录。他将每天更新数据库。
  3. 每个会员每天只能订购一次。如果有人在任何特定的日子有客人,他可以订购多餐。
  4. 通常会员提前一周或两周付账。
  5. 一两个人负责从外面带来食物,他们不需要为他们的午餐付钱。运输成本也给予他们。其食品成本+运输成本平均分配给其他15名会员的费用。

数据库查询:

从管理角度看:

  1. 他将管理/添加日常秩序。 (表格:订单)
  2. 他将增加所有会员的付款,这些付款将根据各成员的“余额”(表格:付款)计入
  3. 他将能够看到所有会员的订单/费用概览历史和他们目前在图表中的平衡一次一个月。
  4. 如果有任何成员的余额为负数或少于特定金额,则会通知管理员仪表板。

从会员角度:

  1. 他就能看到统计最近一个月他目前的平衡和秩序/历史成本在同一时间。
  2. 他将能够查看他所做的最后x个付款历史记录。

基于I上面我所提到的查询试图设计数据库模式看起来像下面的图:

database schema diagram

精一些属性:

EPlatenum :除了订购的盘子数量带来的额外食物盘数量。

Eplatecost:额外的食物盘的成本。这个成本在15个成员之间平均分配成本。

EPersonnum & EPersoncost:参与带来的食物和他们的总成本额外的人的数量。成本将平均分配在15人的个人成本之中。

TransCost:运输成本。成本将平均分配在15人的个人成本之中。

问题:

  1. 什么是我所犯下的错误,我怎么能解决呢?

  2. 对于我的DailyList表我已经使用“日期”作为主键。它可以使用日期作为主键吗?如果不行,那么可以在这里设置主键?

  3. 当我打算填写30个月的成本/订单历史记录时,我认为数据库查询将会非常庞大​​。我应该采取什么方法来优化查询?

我期待着您对改进数据库模式的建议。请帮我纠正我的设计错误并克服它们。感谢您的耐心等待。

+3

从快速查看您的模式,您应该**从不**将货币存储为浮点数,因为它们的精度有限并且可能不准确(例如0.99而不是1)。我建议将任何存储钱的列的数据类型更改为DECIMAL或NUMERIC,因为它们是固定点数。 – 2013-05-04 09:01:25

+0

感谢您的建议。 – xihad 2013-05-04 09:17:45

回答

1

我的第一印象:

  1. 我认为(因为用户支付特定的顺序)支付应与订购。
  2. 我不知道DailyList是什么,但是如果可能有两个以上的日期相同(并且我可以将它图像化),则不应将其用作主键。
  3. 密码应该用例如SHA(所以varchar 15更少)。
+0

2.每日清单实际上是DailyCostList的其他费用,即额外人员的数量和他们的食物的总成本,食物的额外数量和成本包括在这里。每个日期会有一个记录,但不会超过这个记录。 – xihad 2013-05-04 09:16:49

+0

因此,成为主钥匙是完全正确的 – 2013-05-04 09:19:42

+0

1.付款提前支付一周或两周。这些金额将被添加到“用户”表中它们各自的余额字段中。为了跟踪单个餐费,“订单”表 – xihad 2013-05-04 09:23:35