簡體   English   中英

SQL主鍵和外鍵

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM