Foreign-Key

將ER圖轉換為sql中的表和關係

  • April 19, 2016

部門 : 分支是 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));
  1. 課程表:
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);
  1. 申請人表:
create table applicant(app_id number primary key, stud_id number constraint fk
references student(stud_id) constraint stu_unq unique);
  1. 申請者_分支表:
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,請參閱:

在 Oracle SQL 中顯示表的所有約束名稱

引用自:https://dba.stackexchange.com/questions/47707