mysql表的關(guān)系

數(shù)據(jù)庫(kù)表的關(guān)系

  • 一對(duì)多關(guān)系
    一對(duì)多與多對(duì)一是一個(gè)概念,指的是一個(gè)實(shí)體的某個(gè)數(shù)據(jù)與另外一個(gè)實(shí)體的多個(gè)數(shù)據(jù)有關(guān)聯(lián)關(guān)系。
    舉例,學(xué)校中一個(gè)學(xué)、院可以有很多的學(xué)生,而一個(gè)學(xué)生只屬于某一個(gè)學(xué)院(通常情況下),學(xué)院與學(xué)生之間的關(guān)系就是一對(duì)多的關(guān)系,通過外鍵關(guān)聯(lián)來實(shí)現(xiàn)這種關(guān)系。
#創(chuàng)建學(xué)院表:
mysql> CREATE TABLE `department`(
    -> `id` INT PRIMARY KEY AUTO_INCREMENT,
    -> `name` VARCHAR(10) NOT NULL,
    -> `code` INT NOT NULL
    -> );
#創(chuàng)建學(xué)生表
mysql> CREATE TABLE `student`(                                                                                             
    -> `id` INT PRIMARY KEY AUTO_INCREMENT,
    -> `name` VARCHAR(10) NOT NULL,
    -> `dep_id` INT,
    -> CONSTRAINT `stu_dep_for_key` FOREIGN KEY (`dep_id`) REFERENCES `department`(`id`) ON DELETE RESTRICT                     
    -> );

#插入數(shù)據(jù)
mysql> INSERT INTO `department`(`name`,`code`)
    -> VALUES('理學(xué)院',01),
    -> ('計(jì)算機(jī)學(xué)院',02)
    -> ;
mysql> SELECT * FROM `department`;

mysql> INSERT INTO `student`(`name`,`dep_id`)
    -> VALUES('budong',1),
    -> ('awen',1),
    -> ('dongdong',2);
mysql> SELECT * FROM `student`;

一對(duì)一關(guān)系

舉例,學(xué)生表中有學(xué)號(hào)、姓名、學(xué)院,但學(xué)生還有些比如電話,家庭住址等比較私密的信息,這些信息不會(huì)放在學(xué)生表當(dāng)中,會(huì)新建一個(gè)學(xué)生的詳細(xì)信息表來存放。這時(shí)的學(xué)生表和學(xué)生的詳細(xì)信息表兩者的關(guān)系就是一對(duì)一的關(guān)系,因?yàn)橐粋€(gè)學(xué)生只有一條詳細(xì)信息。用外鍵加主鍵的方式來實(shí)現(xiàn)這種關(guān)系。

mysql> DESCRIBE `student`;

#建立學(xué)生的詳細(xì)信息表
mysql> CREATE TABLE `student_details`(
    -> `id` INT PRIMARY KEY AUTO_INCREMENT,
    -> `id_card` INT NOT NULL UNIQUE KEY,
    -> `telephone` INT,
    -> `stu_id` INT,
    -> CONSTRAINT `stu_deta_for_key` FOREIGN KEY (`stu_id`) REFERENCES `student`(`id`) ON DELETE CASCADE
    -> );

#插入數(shù)據(jù)
mysql> INSERT INTO `student_details`(`id_card`,`telephone`,`stu_id`)
    -> VALUES(4301,133,1),
    -> (4302,157,2);
#這里信息一一對(duì)應(yīng),所以一般會(huì)同步插入    

多對(duì)多關(guān)系

一個(gè)實(shí)體的數(shù)據(jù)對(duì)應(yīng)另外一個(gè)實(shí)體的多個(gè)數(shù)據(jù),另外實(shí)體的數(shù)據(jù)也同樣對(duì)應(yīng)當(dāng)前實(shí)體的多個(gè)數(shù)據(jù)。

舉例,學(xué)生要報(bào)名選修課,一個(gè)學(xué)生可以報(bào)名多門課程,一個(gè)課程有很多的學(xué)生報(bào)名,那么學(xué)生表和課程表兩者就形成了多對(duì)多關(guān)系。對(duì)于多對(duì)多關(guān)系,需要?jiǎng)?chuàng)建第三張關(guān)系表,關(guān)系表中通過外鍵加主鍵的形式實(shí)現(xiàn)這種關(guān)系。

#創(chuàng)建課程表
mysql> CREATE TABLE `course`(
    -> `id` INT PRIMARY KEY AUTO_INCREMENT,
    -> `name` VARCHAR(20) NOT NULL
    -> );

mysql> CREATE TABLE `select`(
    -> `stu_id` INT,
    -> `coures_id` INT,
    -> PRIMARY KEY(`stu_id`,`coures_id`),
    -> CONSTRAINT `select_stu_id_for_key` FOREIGN KEY (`stu_id`) REFERENCES `student`(`id`),
    -> CONSTRAINT `select_coures_id_for_key` FOREIGN KEY (`coures_id`) REFERENCES `course`(`id`)
    -> );
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容