【问题标题】:Database Schema for a daily delivery system?每日交付系统的数据库模式?
【发布时间】:2018-12-29 04:19:29
【问题描述】:

我想设计一个数据库,让我的客户每天购买不同数量的任何乳制品(牛奶、凝乳、奶酪),但在月底​​付款。

我无法找出正确的数据库架构,因为我想存储特定产品每天的数量,而客户可以购买多种类型的产品。

那么,前进的方向应该是什么?

编辑:我的架构

客户:
-客户 ID
-名称
-手机号码唯一
-地址
-每日数量(仅供参考。在交易过程中它可以增加或 按要求减少)

产品:
-产品编号
-名称
-单价

交易表
-客户ID(外键)
-产品ID(外键)
-数量
-日期

现在,我想通过合并他在一个月内购买的所有不同物品为每个客户生成每月账单。那么,这个事务表会是最好的方法吗?

【问题讨论】:

  • 没有“一个正确的模式”,顺便说一句。你能想出一个“不正确”的,仍然满足要求吗?然后你可以改进它。
  • @SergioTulentsev 第一次发布查询,所以不知道获得答案的最佳方式。谢谢
  • “这个事务表会是最好的方法吗” - 不知道“最好”的部分,但看起来它确实应该工作。我自己会从类似的东西开始。

标签: database android-sqlite


【解决方案1】:

我添加了一个新表Ticket,因此白天购买的每一件产品都属于一个独特的Ticket

通过这种方式,您可以返回特定票证并查看花费了多少(这是因为价格可能会发生变化,并且一天内有多张票证)。

<Ticket>
-Product id (foreign key)
-Quantity
-total
-Date

我已将您的 Transaction 表修改为只有票证-客户关系。

<Transaction>
-customer_id (foreign key)
-ticket id (foreign key)
-Date

一些 SQL 示例

SELECT Tr.customer_id, MONTH(tr.Date), SUM(ti.total)
FROM Transaction tr, Ticket ti
WHERE tr.ticket_id = ti.id
GROUP BY MONTH(tr.Date)
WHERE Tr.customer_id = ? AND tr.Date BETWEEN ? AND ?

【讨论】:

  • 为什么不简单地在交易中存储另一个字段,即价格?看起来票实体的这种提取没有任何作用。还是我错过了什么?
  • 恕我直言,交易描述了参与者(客户端)和可交易对象(票证)之间的操作。我想你可以给它加上价格,但你也可以用剩下的字段来做。这样做时,您将拥有一个巨大的耦合实体。从语义上确定交易有价格,问题是应该存储在自身还是可交易的相关实体中?
  • @OscarNevarez 我没有想到未来的价格变化,但我认为 Sergio 的方法会更简单。谢谢
猜你喜欢
  • 2019-04-17
  • 1970-01-01
  • 2021-05-11
  • 2021-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多