Foreign-Key
將ER圖轉換為sql中的表和關係
部門 : 分支是 1 : M
分支:課程是1:M
分支:學生是 1:M
分公司 : 申請人是 M : N
申請人 : 學生是 1 : 1
這些是 ER 圖中規定的條件。
這是 ER 圖,必須在實現所有約束的 SQL 程式碼中創建表。我製作了表格並嘗試通過外鍵實現所有關係,我只是想確認這些表格是否正確。
1)部門表:
create table department(dpet_id number primary key, dept_name varchar2(15) not null);
2)分支表:
create table branch(branch_id varchar2(5) primary key, electives varchar2(10), dept_id number references department(dept_id));
- 課程表:
create table course(course_id number primary key, course_name varchar2(10) not null,branch_id varchar2(5) references branch(branch_id));
4)學生表:
create table student(stud_id number primary key, stud_name varchar2(30) not null, branch_id varchar2(5) references branch(branch_id);
- 申請人表:
create table applicant(app_id number primary key, stud_id number constraint fk references student(stud_id) constraint stu_unq unique);
- 申請者_分支表:
create table applicant_branch(app_id number references applicant(app_id), branch_id varchar2(5) references branch(branch_id));
這些表是否符合 ER 圖?
我試圖在上面給出基數條件的 ER 圖。現在請告訴我我的 SQL 程式碼是否有任何錯誤。
Student - Applicant
關係是並且你的1:1
實現是正確的。另一種方法是從表中刪除app_id
(或stud_id
),Applicant
並將(唯一的)列用作Primary Key
約束Foreign Key
(參見下面的程式碼)。我從您的程式碼中假設可以選擇學生作為申請人。如果反過來(一些申請人被選為學生),則必須反轉外鍵約束。
您還有幾列(在外鍵約束中使用)定義為
NULL
. 不知道如何解釋圖表。我想這些應該是NOT NULL
。否則,course.branch_id
例如為 null 意味著您的課程可能與任何分支都不相關。我還將命名(FK)約束,因為這是家庭作業,我會根據提供的圖表命名它們。
添加
NOT NULL
到主鍵列也不錯。它不會改變創建的表中的任何內容 - 直到您決定更改主鍵並且您忘記添加非空約束:create table department (dept_id number not null primary key, dept_name varchar2(15) not null ); create table branch (branch_id varchar2(5) not null primary key, electives varchar2(10), dept_id number not null, constraint Department_Has_Branches foreign key (dept_id) references department(dept_id) ); create table course (course_id number not null primary key, course_name varchar2(10) not null, branch_id varchar2(5) not null, constraint Branch_Offers_Courses foreign key (branch_id) references branch(branch_id) ); create table student (stud_id number not null primary key, stud_name varchar2(30) not null, branch_id varchar2(5) not null, constraint Student_BelongsTo_Branch foreign key (branch_id) references branch(branch_id) ); create table applicant (app_id number not null primary key, -- stud_id removed constraint Student_SelectedAs_Applicant foreign key (app_id) -- app_id used in the FK to Student table references student(stud_id) ); create table applicant_AppliesFor_branch (app_id number not null, branch_id varchar2(5) not null, primary key (app_id, branch_id), constraint Student_AppliesFor_Branch foreign key (app_id) references applicant(app_id), constraint Branch_AppliedBy_Student foreign key (branch_id) references branch(branch_id) );
對於 Oracle,請參閱: