表關係(一對一、一對多、多對多)
- 一對一:如果分析出來是一對一關係,兩張表的欄位不是特別多,最簡單的方案就是合成一張表,或是將兩張表的兩個主鍵進行關聯。
- 一對多:如果分析出來是一對多,就在「多」的表,加一個欄位,和「一」的表進行關聯。
- 多對多:如果分析出來是多對多,就新增一張表,將前面兩張表的主鍵都加進來,讓他變成一個多對多的關係。
一對一
學生基本資料(學號、姓名、姓名)、學生詳細資料(電話、Mail、地址)
如果像下述這樣的一對一關係,兩張表的欄位不是特別多,最簡單的就是合成一張表。 或者像下述一樣,將兩個主鍵進行關聯
1
2
3
4
5
6
7
8
9
10
11
12
13
create table StudentBasicInfo
(
StuNo varchar(20) primary key not null, --學號
StuName varchar(20) not null, --姓名
StuSex varchar(2) not null --性別
)
create table StudentDetailInfo
(
StuNo varchar(20) primary key not null, --學號
StuQQ varchar(20), --QQ
StuPhone varchar(20), --電話
StuMail varchar(100) --Mail
)
一對多(專業表、學生表)
如果分析出來是一對多,就在「多」的表,加一個欄位,和「一」的表進行關聯
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
create table Profession
(
ProId int primary key identity(1,1), --專業編號
ProName varchar(50) not null --專業名稱
)
create table Student
(
StuId int primary key identity(1,1), --學生編號
ProId int not null, --專業編號(此欄位用於關聯專業表)
StuName varchar(50) not null, --學生姓名
StuSex varchar(2) not null --學生性別
)
insert into Profession(ProName) values ('英語'),('C#')
insert into Student(ProId,StuName,StuSex) values
(1,'Ken','男'),(1,'Jen','男'),(2,'Vii','男'),(2,'Rii','男')
多對多(學生信息、課程信息)
正過來是一對多,反過來也是一對多。
如果分析出來是多對多,就新增一張表,將前面表的主鍵加進來,讓他變成一個多對多的關係
多對多(學生信息、課程信息)(添加一張表,表示關係)
添加一張考試信息表,將前面兩張表的主鍵加進來(學生編號、課程編號),讓它變成一個多對多的關係
學生
1
2
3
4
5
6
create table Student
(
StuId varchar(20) primary key identity(1,1), --學號
StuName varchar(20) not null, --姓名
StuSex varchar(2) not null --性別
)
課程
1
2
3
4
5
6
create table Course
(
CourseId int primary key identity(1,1), --課程編號
CourseName varchar(30) not null, --課程名稱
CourseContent varchar(max) --課程介紹
)
考試信息表
添加一張考試信息表,將前面兩張表的主鍵加進來(學生編號、課程編號),讓它變成一個多對多的關係
1
2
3
4
5
6
7
create table Exam
(
ExamId int primary key identity(1,1), --選課成續編號
StuId int not null, --學生編號
CourseId int not null, --課程編號
Score int not null --考試分數
)