这是第 3 范式中的 MEMBER-BOOKING-COURT 设计吗?

Is this MEMBER-BOOKING-COURT design in 3rd Normal Form?

我是一名学生,刚接触数据库设计。我有这个要求:

这是我的答案(主键以粗体显示):

MEMBER(会员编号,会员名,会员姓)

BOOKING(会员号+院号,预约日期,预约时间)

COURT(会员编号+法院编号,时长,付款)

我的解是第 3 范式了吗? 会员编号+法院编号是否为法院table制作了适当的复合键?

会员号+院号已经是BOOKING的key了,我觉得这里是弱实体。我之所以选择 Member number + Court number 作为 COURT table 的组合键,是因为 Court number 可以重复,所以它不是很好的主键 table.

没有

想想什么可以唯一标识 "court"。 "court" 的每个属性都需要依赖于键,整个键,只有键。

我认为 "court" 的候选键类似于 "court number"。

而 "court" 没有持续时间... "booking" 有持续时间。 "court" 没有付款,"booking" 有付款。


对于 "booking",我认为您没有有效的候选密钥。

这取决于"only one court at a time"rule/constraint的interpretation/clarification。在我看来,规则是说在给定的日期和时间,会员最多可以保留一个球场。也就是说,会员可以在星期三下午 3 点预订一个场地,在星期六上午 10 点预订场地...但是会员不能在星期六上午 10 点预订 两个 个场地。

为了帮助实施这一点,您可能需要对元组 (member_number,booking_date,booking_time) 进行唯一约束。也许这是 "booking".

的候选键

(要完全执行 "one court at a time" 规则,将涉及一些额外的逻辑,超出该唯一约束。为了防止成员 Sally 在星期六上午 10 点预订法庭 2 小时,而另一个法庭在上午 11 点(同一个星期六)1 小时。独特的限制本身不会阻止 Sally 从上午 11 点到中午预订 两个 个场地。)


另一种(或额外的)解释是,"court" 在给定时间最多 个成员可以 "booked"。这表明对预订实体的唯一约束......在 (court_number,booking_date,booking_time) 元组上。

再次出现相同的问题,但时间段重叠,开始时间不同,但持续时间足够长,以至于与另一个预订重叠。同样,我们不想让单个 "court" 从上午 10 点开始预订 2 小时,也不允许在上午 11 点预订 1 小时。


使用数据 owner/system 所有者阐明这些类型的需求是 "modeling" 会话的目的,它生成实体关系图 (ERD) 作为发现过程的产物。

我们会让数据所有者通过提出适当的问题来阐明要求...

"booking" 的最短持续时间和最长持续时间是多少?

同一个球场的两次预订可以重叠吗? (上午 10 点 2 小时,上午 11 点 1 小时)

会员是否可以预订("book")周二、周四和周六的场地?

等等

我们要小心,我们构建到数据模型中的约束是硬性规定,真正的约束,它们始终是真实的。不只是 "Well, that's true most of the time. But Doctor Stevens, we let him book two."