0

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

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

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

数据库查询:

从管理员的角度来看:

  1. 他将管理/添加每日订单。(表:订单)
  2. 他将添加所有会员的付款,这些付款将记入各个会员的“余额”(表:付款)
  3. 他将能够在图表中一次查看所有成员的订单/成本历史及其当前余额的概览,为期一个月。
  4. 如果任何成员的余额为负数或少于特定金额,它将被通知到管理仪表板。

从会员的角度:

  1. 他将能够一次查看最近一个月的当前余额和订单/成本历史记录。
  2. 他将能够看到他最近的 x 次付款历史记录。

根据我上面提到的查询,我尝试设计一个如下图所示的数据库模式:

数据库架构图

一些属性的细化:

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

Eplatecost : 额外一盘食物的费用。这笔费用在 15 名成员的个人费用中平均分配。

EPersonnum & EPersoncost : 额外携带食物的人数及其总成本。费用将平均分配给 15 名成员的个人费用。

TransCost:运输成本。费用将平均分配给 15 名成员的个人费用。

问题:

  1. 我犯了哪些错误,我该如何克服?

  2. 对于我的 DailyList 表,我使用“日期”作为主键。可以使用日期作为主键吗?如果不行,这里的主键可以是什么?

  3. 当我要为 30 个月的成本/订单历史填充图表概览时,我假设数据库查询将是巨大的。我应该采取什么方法来优化查询?

我期待收到您关于改进数据库架构的建议。请帮助我纠正我的设计错误并克服它们。感谢您的耐心等待。

4

1 回答 1

1

我的第一印象:

  1. 我认为付款应该与订单相关(因为用户为特定订单付费)。
  2. 我不知道 DailyList 是什么,但如果可能有两个以上的日期相同(我可以想象它可能是),你不应该将它用作主键。
  3. 密码应使用例如 SHA 进行编码(因此 varchar 15 更少)。
于 2013-05-04T09:07:41.323 回答