一對一:比如一個學生對應一個身份證號、學生檔案; 一對多:一個班可以有很多學生,但是一個學生只能在一個班; 多對多:一個班可以有很多學生,學生也可以有很多課程; 一對多關係處理: 我們以學生和班級之間的關係來說明一對多的關係處理方法。假設現有基本表班級表(班級號,備註信息,……)。學生表(學號,姓名 ...
一對一:比如一個學生對應一個身份證號、學生檔案;
一對多:一個班可以有很多學生,但是一個學生只能在一個班;
多對多:一個班可以有很多學生,學生也可以有很多課程;
一對多關係處理:
我們以學生和班級之間的關係來說明一對多的關係處理方法。
假設現有基本表班級表(班級號,備註信息,……)。學生表(學號,姓名),
方法一:
在學生表中新增欄位(班級號),該欄位作為學生表的外鍵與班級表中的班級號關聯。每一個學生實體在班級號欄位的值,表示該學生屬於的班級。
方法二:
新增一個關係表,用來表示學生與班級的屬於關係,該關係表包含欄位(學生號,班級號)。通過學生號與班級號的對應關係表示學生屬於的班級。
代碼示例:
-- 創建班級表
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
)