【发布时间】:2020-05-24 02:30:48
【问题描述】:
这是一个用于门票在线商店的数据库(例如 Airbnb 体验)
对于产品(票),
有可用的日期(和时间)
在有空的日子,
- 可能有多种选择(例如初级班、高级班)
- 有一个可以出售的数量(在多个选项之间共享)
表示这一点的一种方法是
Product
name
Variant (Option)
product
TimeSlot
product
date
time
quantity
TimeslotVariant
variant
timeslot
另一种方法如下。
我看到两个主要区别,
-
第一个区别
- 以上:您需要加入
TimeSlot以查找特定日期的变体。 - 以下:可直接查询
TimeVariant
- 以上:您需要加入
-
第二个区别
- 上图:
[{date, time, [variant1, variant2], quantity}](我认为客户端应用程序更喜欢这个) - 下方:
[{date, time, variant1}, {date, time, variant2}]+[{date, time, quantity}]
- 上图:
Product
name
Variant (Option)
product
TimeSlot
product
date
time
quantity
TimeVariant
variant
date
time
我认为第一个选项更直观(?),但我也认为有时维护额外的连接可能会很痛苦
我应该问自己哪些问题(标准)才能在这两者中做出决定?
【问题讨论】:
-
时隙变体总是(强调永远、永远、永远,即使需求发生变化......)是否与时隙一致?如果是,那么第一个选项更好;如果不是,肯定是第二个更灵活。
-
我很难想象未来的第二个要求会更好,(不是说没有,只是我对这个问题本身不熟悉)你能给我一个吗?跨度>
-
“直观”是客观的。参照完整性不是。归结为@TheImpaler 提出的问题。此外,连接也没有问题。
标签: sql database database-design