[英]SQL primary key and foreign key
一個關系的主鍵是否可以作為外鍵出現在另一個關系上,但在不同的屬性名稱中? 如果是這樣,當我們提供關系模式時,是否可以提供任何一個屬性名稱或是否有不同的方法?
例如:比如說,員工關系有一個主鍵 SID(學生 ID),在一個單獨的關系(比如課程)中有一個名為“學生”的屬性,但包含與 SID 完全相同的組件。 我們如何為這種場景編寫關系模式?
據我理解這個問題,你的第一句話的答案是“是的,它可以”。 您如何稱呼列並不重要(我認為這就是您文本中的“屬性”); 它們應該在數據類型和 - 如果復合 - 列數(屬性)中匹配。
例如(這是 Oracle;您使用哪個數據庫?): t_student
是父表,它在student_id
列上設置了一個主鍵:
SQL> create table t_student
2 (student_id number constraint pk_stu primary key,
3 name varchar2(30),
4 birthdate date
5 );
Table created.
t_course
是一個子表。 它的sid
列引用了t_student.student_id
列; 它們在名稱上不匹配(這就是你問的),但是 - 它們在數據類型上也不匹配:
SQL> create table t_course
2 (course_id number constraint pk_cou primary key,
3 sid varchar2(10) constraint fk_coustu references t_student(student_id),
4 name varchar2(20)
5 );
sid varchar2(10) constraint fk_coustu references t_student(student_id),
*
ERROR at line 3:
ORA-02267: column type incompatible with referenced column type
如您所見,它失敗了。 但是,如果更改數據類型以匹配父表的主鍵列的數據類型,則一切正常:
SQL> create table t_course
2 (course_id number constraint pk_cou primary key,
3 sid number constraint fk_coustu references t_student(student_id),
4 name varchar2(20)
5 );
Table created.
SQL>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.