Home [SQL筆記] 資料表關聯(表關係)
Post
Cancel

[SQL筆記] 資料表關聯(表關係)

表關係(一對一、一對多、多對多)

  • 一對一:如果分析出來是一對一關係,兩張表的欄位不是特別多,最簡單的方案就是合成一張表,或是將兩張表的兩個主鍵進行關聯。
  • 一對多:如果分析出來是一對多,就在「多」的表,加一個欄位,和「一」的表進行關聯。
  • 多對多:如果分析出來是多對多,就新增一張表,將前面兩張表的主鍵都加進來,讓他變成一個多對多的關係。

一對一

學生基本資料(學號、姓名、姓名)、學生詳細資料(電話、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 --考試分數
)
This post is licensed under CC BY 4.0 by the author.