【個人筆記】《知了堂》MySQL三種關系:一對一,一對多,多對多。


 

一對一:比如一個學生對應一個身份證號、學生檔案;

一對多:一個班可以有很多學生,但是一個學生只能在一個班;

多對多:一個班可以有很多學生,學生也可以有很多課程;

 

一對多關系處理:

我們以學生和班級之間的關系來說明一對多的關系處理方法。
假設現有基本表班級表(班級號,備注信息,……)。學生表(學號,姓名),

                       

方法一:
在學生表中新增字段(班級號),該字段作為學生表的外鍵與班級表中的班級號關聯。每一個學生實體在班級號字段的值,表示該學生屬於的班級。

方法二:
新增一個關系表,用來表示學生與班級的屬於關系,該關系表包含字段(學生號,班級號)。通過學生號與班級號的對應關系表示學生屬於的班級。

代碼示例:

-- 創建班級表
CREATE TABLE t_class(
c_id INT PRIMARY KEY AUTO_INCREMENT, --班級id
c_name VARCHAR(20) NOT NULL UNIQUE --班級名稱
)


-- 刪除學生表
DROP TABLE t_student;


-- 創建學生表
CREATE TABLE t_student(
s_id INT PRIMARY KEY AUTO_INCREMENT,  --主鍵id
s_name VARCHAR(15) UNIQUE,   --姓名
s_sex VARCHAR(5) DEFAULT '男',  --性別
s_age INT, --年齡
s_class_id INT, --班級id

使用外鍵關聯班級表的主鍵,附:表的外鍵必須是另一張表的主鍵
CONSTRAINT FOREIGN KEY(s_class_id) REFERENCES t_class(c_id)
)


-- 添加數據
INSERT INTO t_student(s_name,s_sex,s_age)
VALUES ('劉基','男','20')
INSERT INTO t_student(s_name,s_sex,s_age)
VALUES ('老劉','男','22')
INSERT INTO t_student(s_name,s_sex,s_age)
VALUES ('唐伯虎','男','20')

小結:一般情況下,一對多關系采用方法一來處理。

 

多對多關系處理:

 

在多對多關系中,我們要新增加一個關系表。在學生表和課程表的基礎上增加選課表來表示學生與課程之間的多對多關系。在選課表中,必須含有的屬性有學生號和課程號。(學生號,課程號)這個屬性集剛好也就是選課表的關鍵字。

代碼示例:

-- 創建學生表
CREATE TABLE student(
t_id INT PRIMARY KEY AUTO_INCREMENT, -- 學號
t_name VARCHAR(20), -- 學生名字
t_age INT, -- 年齡
t_sex CHAR(4), --性別
t_date DATE,
t_enrolDate DATETIME, 
t_class VARCHAR(20)
)
-- 創建班級表
CREATE TABLE class(
b_id INT PRIMARY KEY AUTO_INCREMENT,
b_name VARCHAR(20), --編輯編號
b_bname VARCHAR(50), --班級名稱
b_start DATE --開班時間 類型 date   
)
-- 成績表
CREATE TABLE grade(
c_id INT,
c_nameId INT,  --學生id 類型 int
c_courseId VARCHAR(40), --課程編號 類型 varchar
c_coursegrade INT, --課程成績  類型 int 
c_exam DATE --考試時間 類型 date
)
-- 課程表
CREATE TABLE course(
k_id VARCHAR(40),  --課程編號 類型 varchar
k_name VARCHAR(40)  --課程名稱 類型 varchar
)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM