Mysql 设计我的第一个数据库模式:需要建议

Mysql 设计我的第一个数据库模式:需要建议,mysql,database-design,Mysql,Database Design,这是我的第一个数据库模式设计。我正在尝试为我的部门开发一个小型web应用程序,用于食品成本管理。我这样做是为了我的学习目的 我所在部门的食品成本管理工作方式: 成员总数:15 一名管理员负责记录所有费用。他将每天更新数据库 每个会员每天只能订购一次。如果任何人在任何特定的一天有客人,他可以点很多餐 会员通常提前一两周付账 一两个人负责从外面带来食物,他们不需要支付午餐费用。运输费用也给了他们。他们的食物费+交通费平均分配给其他15名成员 数据库查询: 从管理员角度: 他将管理/添加每日订单。(表

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

我所在部门的食品成本管理工作方式:

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

    从管理员角度:

  • 他将管理/添加每日订单。(表:订单)
  • 他将添加所有成员的付款,这些付款将从各自成员的“余额”中贷记(表:付款)
  • 他将能够在一张图表中查看所有会员的订单/成本历史记录及其当前余额,每次一个月
  • 如果任何成员有负余额或少于特定金额的钱,它将通知管理仪表板
  • 从会员角度:

  • 他将能够一次查看最近一个月的当前余额和订单/成本历史记录
  • 他将能够看到他所做的最后x个付款记录
  • 基于上面提到的查询,我尝试设计一个数据库模式,如下图所示:

    某些属性的细化:

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

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

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

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

    问题:

  • 我犯了哪些错误?我怎样才能克服它们

  • 对于我的DailyList表,我使用了“date”作为主键。可以使用date作为主键吗?如果不正常,这里的主键可以是什么

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

  • 我期待着得到您关于改进数据库模式的建议。请帮助我改正我的设计错误并克服它们。谢谢您的耐心。

    我的第一印象:

  • 我认为付款应该与订单相关(因为用户为特定订单付款)
  • 我不知道DailyList是什么,但是如果可能有两个以上的日期相同(正如我想象的那样),你不应该将它用作primari键
  • 密码应使用SHA等编码(因此varchar 15的值应小于或等于)

  • 通过快速查看您的模式,您不应该将货币存储为float,因为它们的精度有限,并且可能不准确(例如,0.99而不是1)。我建议更改任何以十进制或数字形式存储货币的列的数据类型,因为它们是固定点数。谢谢你的建议。每日清单实际上是其他费用的每日成本清单,即额外的人数和食物总成本,额外的食物盘数量及其成本包含在这里。每个日期都会有一条记录,但不会超过那个记录。所以作为主键是完全可以的。付款提前一周或两周支付。这些金额将添加到“用户”表中各自的余额字段中。为了跟踪个人用餐成本,“订单”表OK中有一个属性“OrderCost”,这样就可以了。另一条线索是,不要用“浮动”来表示价格。您应该使用十进制格式(这是一种很好的做法,因为存在浮点精度问题)。