考虑一个描述大学辅导室预订的关系。每个教员都会指定一个人来处理该教员所有辅导班的预订。该人的电子邮件地址作为联系人提供给大学的预订系统。预订(b_date,b_starttime,b_endtime,unit_code,contact_person,room_no,tutor_id)。
练习:如果以下业务规则适用,则确定关系的候选键和主键:
1) 辅导课程可以是 1 小时或 2 小时。
2) 一个导师在一个给定的单元中只能教授一个辅导课。
3) 辅导班不设平行时段。
我的回答:候选键 1 是 (tutor_id, d_date)。我的建议键可以使每个元组唯一但是没有约束可以防止用户输入错误,如下所示:
导师ID | d_date | b_starttime | b_endtime | 单位代码 |
AAAA | 星期一 | 下午 6 点 | 晚上 8 点 | FIT1111 |
BBBB | 星期一 | 下午 6 点 | 晚上 7 点 | FIT1111 |
或者
导师ID | d_date | b_starttime | b_endtime | 单位代码 |
AAAA | 星期一 | 下午 6 点 | 晚上 8 点 | FIT1111 |
BBBB | 星期一 | 晚上 7 点 | 晚上 8 点 | FIT1111 |
因此,我的密钥不符合业务规则 3。然后,我向候选键(tutor_id、d_date、b_starttime、b_endtime)添加了另外 2 个属性。
我的问题是,当我们选择候选键时,除了保证每个元组的唯一性之外,我们是否需要防止用户可能输入错误而破坏业务规则?如果是,例如,当我们将 4 个属性(A、B、C、D)设置为主键时,DBMS 是否如上表那样阻止用户进行错误的输入操作?
谢谢。