Database 确定超级密钥
今日的法庭预约Database 确定超级密钥,database,database-design,key,3nf,bcnf,Database,Database Design,Key,3nf,Bcnf,今日的法庭预约 表中的每一行表示网球俱乐部的场地预订,该俱乐部有一个硬场地(1号场地)和一个草地场地(2号场地) 预订由法院和法院保留的期限确定 此外,每个预订都有一个与之关联的费率类型。有四种不同的费率类型: 节省,用于会员预订的1号球场 标准,适用于非会员预订的1号球场 高级A,适用于会员预订的2号球场 PREMIUM-B,适用于非会员预订的2号球场 表的超级键是: S1={球场,开始时间} S2={球场,结束时间} S3={速率类型,开始时间} S4={速率类型,结束时间}
- 表中的每一行表示网球俱乐部的场地预订,该俱乐部有一个硬场地(1号场地)和一个草地场地(2号场地)
- 预订由法院和法院保留的期限确定
- 此外,每个预订都有一个与之关联的费率类型。有四种不同的费率类型:
- 节省,用于会员预订的1号球场
- 标准,适用于非会员预订的1号球场
- 高级A,适用于会员预订的2号球场
- PREMIUM-B,适用于非会员预订的2号球场
- S1={球场,开始时间}
- S2={球场,结束时间}
- S3={速率类型,开始时间}
- S4={速率类型,结束时间}
- S5={球场,开始时间,结束时间}
- S6={速率类型、开始时间、结束时间}
- S7={场地,费率类型,开始时间}
- S8={场地,费率类型,结束时间}
- ST={Court,Rate Type,Start Time,End Time},普通超键
显然S1={Court,Start Time}不是超级键。还是我错了?这个例子是一个糟糕的选择,因为要理解表格应该包含哪些内容,需要进行未陈述的假设,尽管这是常识。它希望您看到该表仅为一天--“今天”--并推断在任何一天都不会有重叠预订。即一个法院的无起止时间段与同一法院的另一个起止时间段重叠。(文本中提到了不同的日期,它们表示不同的表值;但对于示例来说,不同的值是否必须在不同的日期并不重要。) 对于3NF和BCNF来说,这也是一个糟糕的选择。当然,它受制于某些FD(功能依赖项)及其与3NF和BCNF相关的JD(连接依赖项)。但预订的不重叠是一个单独的约束,与3NF与BCNF无关 比如说,在第一天,一名会员从11:00到12:00登记一号球场,在第二天,一名非会员从11:00到12:00登记一号球场 当我们说表值“满足”约束(如FD)或“受制于”约束或“具有”约束或约束“包含在”表值中时,我们的意思是该值使约束为真。当我们谈到表变量(基表)时,我们的意思是,对于每个数据库状态中的变量值来说都是如此。对于这个表,描述了“今天”的当前预订情况,任何特定的预订情况都将是大约一天——今天。因此,报价中涉及不同日期的重叠与约束无关。同样地,无论预订如何更改,同一天不同时间的每个表值都将满足约束本身 在这些情况下对于表的任何状态,四组指定的列都是CKs(候选键):
- S1={球场,开始时间}
- S2={球场,结束时间}
- S3={速率类型,开始时间}
- S4={速率类型,结束时间}