數據庫一對一、一對多、多對多關系


數據庫一對一、一對多、多對多關系

一、首先給出三種關系的實例

  1. 一對一關系實例

​ 一個人對應一張身份證,一張身份證對應一個人

  1. 一對多關系實例

​ 一個公司的部門擁有多個職員,一個職員只能夠屬於某個部門

  1. 多對多實例

​ 一本圖示可以擁有多個作者,一個作者可以寫很多本書。

一對一關系

一對多,是最常見的一種設計。就是 A 表的一條記錄,對應 B 表的多條記錄,且 A 的主鍵作為 B 表的外鍵。這主要看以哪張表為中心。

優點

  1. 便於管理、可提高一定的查詢速度
  2. 減輕 CPU 的 IO 讀寫,提高存取效率。
  3. 符合數據庫設計的三大范式。
  4. 符合關系性數據庫的特性。

缺點

增加一定的復雜程度,程序中的讀寫難度加大。

# 左表的一條記錄唯一對應右表的一條記錄,反之也一樣
# 身份證表
create table iden(
    id int primary key auto_increment,
    name char(20) not null,
    iden_num char(18) not null unique

);

# 公民表
create table civi(
    id int primary key auto_increment,
    name char(20) not null,
    civi_id int unique, 
    foreign key(iden_id) references ident(iden_num) #外鍵的字段一定要保證unique
    on delete cascade
    on update cascade
);

一對多關系

一對多,是最常見的一種設計。就是 A 表的一條記錄,對應 B 表的多條記錄,且 A 的主鍵作為 B 表的外鍵。這主要看以哪張表為中心,我們把多對一和一對多統稱為一對多關系,數據庫中不存在多對一關系。

create table dep(
    id int primary key auto_increment,
    dep_name char(10),
    dep_comment char(60)
);

create table emp(
    id int primary key auto_increment,
    name char(16),
    gender enum('male','female') not null default 'male',
    dep_id int,
    foreign key(dep_id) references dep(id)
    on update cascade
    on delete cascade
);

多對多關系

多對多,在數據庫中也比較常見,可以理解為是一對多和多對一的組合。要實現多對多,一般都需要有一張中間表(也叫關聯表),將兩張表進行關聯,形成多對多的形式。

create table author(
    id int primary key auto_increment,
    name char(16)
);

create table book(
    id int primary key auto_increment,
    bname char(16),
    price int
);
create table author2book(
    id int primary key auto_increment,
    author_id int,
    book_id int,
    foreign key(author_id) references author(id)
    on update cascade
    on delete cascade,
    foreign key(book_id) references book(id)
    on update cascade
    on delete cascade
);


免責聲明!

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



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