方立勳_30天掌握JavaWeb_資料庫表設計
定義外來鍵約束
丈夫、妻子表:
妻子用一個husband_id來說明wife丈夫是哪個。
一對多物件表設計
部門、員工表:
一個部門可以有多個員工,員工表通過department_id說明屬於哪個部門。
一對多或多對一的物件存到資料庫時,表的設計方案
部門和員工
create table department
(
id int primary key,
name varchar(40)
);create table employee
(
id int primary key,
name varchar(40),
salary decimal(8,2),
department_id int,
constraint department_id_FK foreign key(department_id) references department(id)
);
多對多物件表關係設計
教師、學生表:
通過一張中間表teacher_student來說明關係。
多對多物件的表的設計(老師和學生)
create table teacher
(
id int primary key,
name varchar(40),
salary decimal(8,2)
);create table student
(
id int primary key,
name varchar(40)
);create table teacher_student
(
teacher_id int,
student_id int,
primary key(teacher_id,student_id),
constraint teacher_id_FK foreign key(teacher_id) references teacher(id),
constraint student_id_FK foreign key(student_id) references student(id)
);
一對一物件表設計(具體主從關係)
人、身份證表:
省份證是從表,直接用主鍵id作為外來鍵。
一對一的物件的資料庫設計
create table person
(
id int primary key,
name varchar(40)
);create table idcard
(
id int primary key,
city varchar(40),
constraint id_FK foreign key(id) references person(id)
);
自連線的表設計
家譜管理系統。
打個比如:你爺爺生了你爸爸,你爸爸生你,你又生了孩子。
Person物件:id、姓名、Person(記住爸爸)、Children(記住孩子)。
這樣的表設計,直接存入了一張表,用一個欄位parent_id來說明。parent_id 來自id,需要加外來鍵約束,不能加非空約束。
create table person
(
id int primary key,
name varchar(40),
parent_id int,
constraint parent_id_FK foreign key(parent_id) references person(id)
);
當然顯示實際開發中,有的為了查詢效率,並不會這麼設計,可能會去增加冗餘欄位加快查詢速度。