関係データベースを使い“社員”表と“部署”表を作成して社員情報を管理する。“社員”表と“部署”表に,必要に応じて設定する主キーと外部キーの適切な組合せはどれか。ここで,社員は必ず“部署”表に存在する部署に所属するものとし,社員データの追加や更新をするときには,参照制約を利用して整合性を確保するものとする。 社員
| 社員コード | 社員名 | 入社年 | 生年月日 | 部署コード |
|---|
部署
| 部署コード | 部署名 |
|---|
这道题的解析和你的作答记录。
関係データベースを使い“社員”表と“部署”表を作成して社員情報を管理する。“社員”表と“部署”表に,必要に応じて設定する主キーと外部キーの適切な組合せはどれか。ここで,社員は必ず“部署”表に存在する部署に所属するものとし,社員データの追加や更新をするときには,参照制約を利用して整合性を確保するものとする。 社員
| 社員コード | 社員名 | 入社年 | 生年月日 | 部署コード |
|---|
部署
| 部署コード | 部署名 |
|---|
主键的设置虽然正确,但把外键写成了「无」。没有外键,参照约束就不会生效,因此即使把“部门”表中不存在的部门代码录入员工数据,DBMS 也无法阻止。这样就无法满足题目要求的「利用参照约束确保完整性」这一条件,所以是错误的。
正解 主键是「唯一标识表中每一行的列」,因此在一名员工占一行的“员工”表中是员工代码、在一个部门占一行的“部门”表中是部门代码,各自成为主键。接下来,“员工”表的部门代码列表示该员工所属的部门,其值指向“部门”表主键(部门代码)的值。像这样引用其他表主键的列就是外键。设置外键后,参照约束(参照完整性约束)便会生效,当试图用“部门”表中不存在的部门代码添加或更新员工数据时,DBMS 会予以拒绝,因此题目中「员工必定隶属于『部门』表中存在的部门」这一条件可以自动得到遵守。所以,主键是“员工”表的员工代码和“部门”表的部门代码、外键是“员工”表的部门代码,即イ为正确答案。
由于“员工”表没有设置主键,员工代码重复的行也能被登记,无法唯一标识员工。另外,员工代码并不是引用其他表主键的列,所以不属于外键。能够成为外键的只有“员工”表的部门代码。
如果把“员工”表的部门代码设为主键,其取值就不允许重复,同一个部门便无法有多名员工隶属。另外,“部门”表的部门代码是被引用一方的主键而不是外键,员工代码也不引用其他表,因此同样不能成为外键。这是主键与外键的角色互换了的组合,参照的方向也是相反的。