柚子快報(bào)邀請碼778899分享:數(shù)據(jù)庫基礎(chǔ)篇 《1. 概述》
柚子快報(bào)邀請碼778899分享:數(shù)據(jù)庫基礎(chǔ)篇 《1. 概述》
目錄
1.?為什么要使用數(shù)據(jù)庫
2. 數(shù)據(jù)庫與數(shù)據(jù)庫管理系統(tǒng)
2.1 數(shù)據(jù)庫的相關(guān)概念
2.2 數(shù)據(jù)庫與數(shù)據(jù)庫管理系統(tǒng)的關(guān)系
2.3 常見的數(shù)據(jù)庫管理系統(tǒng)排名(DBMS)
2.4 常見的數(shù)據(jù)庫介紹
3. MySQL介紹
3.1 概述
3.2 MySQL發(fā)展史重大事件
4. RDBMS 與 非RDBMS
4.1 關(guān)系型數(shù)據(jù)庫(RDBMS)
4.1.1 實(shí)質(zhì)
4.1.2 優(yōu)勢
4.2 非關(guān)系型數(shù)據(jù)庫(非RDBMS)
4.2.1 介紹
4.2.2 有哪些非關(guān)系型數(shù)據(jù)庫
4.2.3 NoSQL的演變
4.3 小結(jié)
5. 關(guān)系型數(shù)據(jù)庫設(shè)計(jì)規(guī)則
5.1 表、記錄、字段
5.2 表的關(guān)聯(lián)關(guān)系
5.2.1 一對一關(guān)聯(lián)(one-to-one)
5.2.2 一對多關(guān)系(one-to-many)
5.2.3 多對多(many-to-many)
5.3.4 自我引用(Self reference)
??編輯
1.?為什么要使用數(shù)據(jù)庫
持久化
(persistence)
:
把數(shù)據(jù)保存到可掉電式存儲設(shè)備中以供之后使用
。大多數(shù)情況下,特別是企
業(yè)級應(yīng)用,
數(shù)據(jù)持久化意味著將內(nèi)存中的數(shù)據(jù)保存到硬盤上加以
”
固化
”
,而持久化的實(shí)現(xiàn)過程大多
通過各種關(guān)系數(shù)據(jù)庫來完成。
持久化的主要作用是
將內(nèi)存中的數(shù)據(jù)存儲在關(guān)系型數(shù)據(jù)庫中
,當(dāng)然也可以存儲在磁盤文件、
XML
數(shù)
據(jù)文件中。
2. 數(shù)據(jù)庫與數(shù)據(jù)庫管理系統(tǒng)
2.1 數(shù)據(jù)庫的相關(guān)概念
DB
:數(shù)據(jù)庫(
Database
)
即存儲數(shù)據(jù)的
“
倉庫
”
,其本質(zhì)是一個(gè)文件系統(tǒng)。它保存了一系列有組織的數(shù)據(jù)。
DBMS
:數(shù)據(jù)庫管理系統(tǒng)(
Database Management System
)
是一種操縱和管理數(shù)據(jù)庫的大型軟件,用于建立、使用和維護(hù)數(shù)據(jù)庫,對數(shù)據(jù)庫進(jìn)行統(tǒng)一管理和控
制。用戶通過數(shù)據(jù)庫管理系統(tǒng)訪問數(shù)據(jù)庫中表內(nèi)的數(shù)據(jù)。
SQL
:結(jié)構(gòu)化查詢語言(
Structured Query Language
)
專門用來與數(shù)據(jù)庫通信的語言。
2.2 數(shù)據(jù)庫與數(shù)據(jù)庫管理系統(tǒng)的關(guān)系
數(shù)據(jù)庫管理系統(tǒng)
(DBMS)
可以管理多個(gè)數(shù)據(jù)庫,一般開發(fā)人員會針對每一個(gè)應(yīng)用創(chuàng)建一個(gè)數(shù)據(jù)庫。為保存應(yīng)用中實(shí)體的數(shù)據(jù),一般會在數(shù)據(jù)庫創(chuàng)建多個(gè)表,以保存程序中實(shí)體用戶的數(shù)據(jù)。
數(shù)據(jù)庫管理系統(tǒng)、數(shù)據(jù)庫和表的關(guān)系如圖所示:
2.3 常見的數(shù)據(jù)庫管理系統(tǒng)排名(DBMS)
目前互聯(lián)網(wǎng)上常見的數(shù)據(jù)庫管理軟件有
Oracle
、
MySQL
、
MS SQL Server
、
DB2
、
PostgreSQL
、
Access.?
Sybase、
Informix
這幾種。以下是
2021
年
DB-Engines Ranking
對各數(shù)據(jù)庫受歡迎程度進(jìn)行調(diào)查后的統(tǒng)計(jì)結(jié)果:(查看數(shù)據(jù)庫最新排名:
https://db-engines.com/en/ranking
)
2.4 常見的數(shù)據(jù)庫介紹
Oracle
1979
年,
Oracle 2
誕生,它是第一個(gè)商用的
RDBMS
(關(guān)系型數(shù)據(jù)庫管理系統(tǒng))。隨著
Oracle
軟件的名氣越來越大,公司也改名叫 Oracle
公司。
2007
年,總計(jì)
85
億美金收購
BEA Systems
。
2009
年,總計(jì)
74
億美金收購
SUN
。此前的
2008
年,
SUN
以
10
億美金收購
MySQL
。意味著
Oracle
同時(shí)擁有了MySQL 的管理權(quán),至此
Oracle
在數(shù)據(jù)庫領(lǐng)域中成為絕對的領(lǐng)導(dǎo)者。
2013
年,甲骨文超越
IBM
,成為繼
Microsoft
后全球第二大軟件公司。
如今
Oracle
的年收入達(dá)到了
400
億美金,足以證明商用(收費(fèi))數(shù)據(jù)庫軟件的價(jià)值。
SQL Server
SQL Server
是微軟開發(fā)的大型商業(yè)數(shù)據(jù)庫,誕生于
1989
年。
C#
、
.net
等語言常使用,與
WinNT
完全集成,也可以很好地與Microsoft BackOffice
產(chǎn)品集成。
DB2
IBM
公司的數(shù)據(jù)庫產(chǎn)品
,
收費(fèi)的。常應(yīng)用在銀行系統(tǒng)中。
PostgreSQL
PostgreSQL
的穩(wěn)定性極強(qiáng),最符合
SQL
標(biāo)準(zhǔn),開放源碼,具備商業(yè)級
DBMS
質(zhì)量。
PG
對數(shù)據(jù)量大的文本以及SQL
處理較快。
SyBase
已經(jīng)淡出歷史舞臺。提供了一個(gè)非常專業(yè)數(shù)據(jù)建模的工具
PowerDesigner
。
SQLite
嵌入式的小型數(shù)據(jù)庫,應(yīng)用在手機(jī)端。 零配置,
SQlite3
不用安裝,不用配置,不用啟動,關(guān)閉或者配置數(shù)據(jù)庫實(shí)例。當(dāng)系統(tǒng)崩潰后不用做任何恢復(fù)操作,再下次使用數(shù)據(jù)庫的時(shí)候自動恢復(fù)。
informix
IBM
公司出品,取自
Information
和
Unix
的結(jié)合,它是第一個(gè)被移植到
Linux
上的商業(yè)數(shù)據(jù)庫產(chǎn)品。僅運(yùn)行于unix/linux
平臺,命令行操作。 性能較高,支持集群,適應(yīng)于安全性要求極高的系統(tǒng),尤其是銀行,證券系統(tǒng)的應(yīng)用。
3. MySQL介紹
?
3.1 概述
MySQL
是一個(gè)
開放源代碼的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)
,由瑞典
MySQL AB
(創(chuàng)始人
Michael Widenius
)公司1995
年開發(fā),迅速成為開源數(shù)據(jù)庫的
No.1
。
2008
被
Sun
收購(10億美金),
2009
年
Sun
被
Oracle
收購。
MariaDB
應(yīng)運(yùn)而生。(
MySQL
的創(chuàng)造者擔(dān)心 MySQL
有閉源的風(fēng)險(xiǎn),因此創(chuàng)建了
MySQL
的分支項(xiàng)目
MariaDB
)
MySQL6.x
版本之后分為
社區(qū)版
和
商業(yè)版
。
MySQL
是一種關(guān)聯(lián)數(shù)據(jù)庫管理系統(tǒng),將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個(gè)大倉庫內(nèi),這樣就增加了速度并提高了靈活性。
MySQL
是開源的,所以你不需要支付額外的費(fèi)用。
MySQL
是可以定制的,采用了
GPL
(
GNU General Public License
)
協(xié)議,你可以修改源碼來
開發(fā)自己的
MySQL
系統(tǒng)。
MySQL
支持大型的數(shù)據(jù)庫??梢蕴幚頁碛猩锨f條記錄的大型數(shù)據(jù)庫。
MySQL
支持大型數(shù)據(jù)庫,支持
5000
萬條記錄的數(shù)據(jù)倉庫,
32
位系統(tǒng)表文件最大可支持
4GB
,
64
位系 統(tǒng)支持最大的表文件為
8TB
。
MySQL
使用
標(biāo)準(zhǔn)的
SQL
數(shù)據(jù)語言
形式。
MySQL
可以允許運(yùn)行于多個(gè)系統(tǒng)上,并且支持多種語言。這些編程語言包括
C
、
C++
、
Python
、
Java
、
Perl
、
PHP
和
Ruby
等。
3.2 MySQL發(fā)展史重大事件
MySQL
的歷史就是整個(gè)互聯(lián)網(wǎng)的發(fā)展史?;ヂ?lián)網(wǎng)業(yè)務(wù)從社交領(lǐng)域、電商領(lǐng)域到金融領(lǐng)域的發(fā)展,推動著
應(yīng)用對數(shù)據(jù)庫的需求提升,對傳統(tǒng)的數(shù)據(jù)庫服務(wù)能力提出了挑戰(zhàn)。高并發(fā)、高性能、高可用、輕資源、
易維護(hù)、易擴(kuò)展的需求,促進(jìn)了
MySQL
的長足發(fā)展。
1.4
關(guān)于
MySQL 8.0
MySQL
從
5.7
版本直接跳躍發(fā)布了
8.0
版本
,可見這是一個(gè)令人興奮的里程碑版本。
MySQL 8
版本在功能上
做了顯著的改進(jìn)與增強(qiáng),開發(fā)者對
MySQL
的源代碼進(jìn)行了重構(gòu),最突出的一點(diǎn)是多
MySQL Optimizer
優(yōu)化
器進(jìn)行了改進(jìn)。不僅在速度上得到了改善,還為用戶帶來了更好的性能和更棒的體驗(yàn)。
1.5 Why choose MySQL?
為什么如此多的廠商要選用
MySQL
?大概總結(jié)的原因主要有以下幾點(diǎn):
1.
開放源代碼,使用成本低。
2.
性能卓越,服務(wù)穩(wěn)定。
3.
軟件體積小,使用簡單,并且易于維護(hù)。
4.
歷史悠久,社區(qū)用戶非?;钴S,遇到問題可以尋求幫助。
5.
許多互聯(lián)網(wǎng)公司在用,經(jīng)過了時(shí)間的驗(yàn)證。
1.6 Oracle vs MySQL
Oracle
更適合大型跨國企業(yè)的使用,因?yàn)樗麄儗M(fèi)用不敏感,但是對性能要求以及安全性有更高的要
求。
MySQL
由于其
體積小、速度快、總體擁有成本低,可處理上千萬條記錄的大型數(shù)據(jù)庫,尤其是開放源碼
這一特點(diǎn),使得很多互聯(lián)網(wǎng)公司、中小型網(wǎng)站選擇了
MySQL
作為網(wǎng)站數(shù)據(jù)庫
(Facebook,
, YouTube,阿里巴巴
/
螞蟻金服,去哪兒,美團(tuán)外賣,騰訊)
4. RDBMS 與 非RDBMS
從排名中我們能看出來,關(guān)系型數(shù)據(jù)庫絕對是
DBMS
的主流,其中使用最多的
DBMS
分別是
Oracle
、MySQL 和
SQL Server
。這些都是關(guān)系型數(shù)據(jù)庫(RDBMS)。
4.1 關(guān)系型數(shù)據(jù)庫(RDBMS)
4.1.1 實(shí)質(zhì)
這種類型的數(shù)據(jù)庫是
最古老
的數(shù)據(jù)庫類型,關(guān)系型數(shù)據(jù)庫模型是把復(fù)雜的數(shù)據(jù)結(jié)構(gòu)歸結(jié)為簡單的
二元關(guān)系
(即二維表格形式)。
關(guān)系型數(shù)據(jù)庫以
行
(row)
和
列
(column)
的形式存儲數(shù)據(jù),以便于用戶理解。這一系列的行和列被
稱為
表
(table)
,一組表組成了一個(gè)庫
(database)
。
表與表之間的數(shù)據(jù)記錄有關(guān)系
(relationship)
。現(xiàn)實(shí)世界中的各種實(shí)體以及實(shí)體之間的各種聯(lián)系均用?
關(guān)系模型
來表示。關(guān)系型數(shù)據(jù)庫,就是建立在
關(guān)系模型
基礎(chǔ)上的數(shù)據(jù)庫。
SQL
就是關(guān)系型數(shù)據(jù)庫的查詢語言。
?
4.1.2 優(yōu)勢
復(fù)雜查詢
可以用
SQL
語句方便的在一個(gè)表以及多個(gè)表之間做非常復(fù)雜的數(shù)據(jù)查詢。
事務(wù)支持
使得對于安全性能很高的數(shù)據(jù)訪問要求得以實(shí)現(xiàn)。
4.2 非關(guān)系型數(shù)據(jù)庫(非RDBMS)
4.2.1 介紹
非關(guān)系型數(shù)據(jù)庫
,可看成傳統(tǒng)關(guān)系型數(shù)據(jù)庫的功能
閹割版本
,基于鍵值對存儲數(shù)據(jù),不需要經(jīng)過
SQL
層 的解析,
性能非常高
。同時(shí),通過減少不常用的功能,進(jìn)一步提高性能。
目前基本上大部分主流的非關(guān)系型數(shù)據(jù)庫都是免費(fèi)的。
4.2.2 有哪些非關(guān)系型數(shù)據(jù)庫
相比于
SQL
,
NoSQL
泛指非關(guān)系型數(shù)據(jù)庫,包括了榜單上的鍵值型數(shù)據(jù)庫、文檔型數(shù)據(jù)庫、搜索引擎和列存儲等,除此以外還包括圖形數(shù)據(jù)庫。也只有用 NoSQL
一詞才能將這些技術(shù)囊括進(jìn)來。
鍵值型數(shù)據(jù)庫
鍵值型數(shù)據(jù)庫通過
Key-Value
鍵值的方式來存儲數(shù)據(jù),其中
Key
和
Value
可以是簡單的對象,也可以是復(fù)雜的對象。Key
作為唯一的標(biāo)識符,優(yōu)點(diǎn)是查找速度快,在這方面明顯優(yōu)于關(guān)系型數(shù)據(jù)庫,缺點(diǎn)是無法像關(guān)系型數(shù)據(jù)庫一樣使用條件過濾(比如 WHERE
),如果你不知道去哪里找數(shù)據(jù),就要遍歷所有的鍵,這就會消耗大量的計(jì)算。鍵值型數(shù)據(jù)庫典型的使用場景是作為
內(nèi)存緩存
。
Redis
是最流行的鍵值型數(shù)據(jù)庫。
文檔型數(shù)據(jù)庫
此類數(shù)據(jù)庫可存放并獲取文檔,可以是
XML
、
JSON
等格式。在數(shù)據(jù)庫中文檔作為處理信息的基本單位,一個(gè)文檔就相當(dāng)于一條記錄。文檔數(shù)據(jù)庫所存放的文檔,就相當(dāng)于鍵值數(shù)據(jù)庫所存放的“
值
”
。
MongoDB是最流行的文檔型數(shù)據(jù)庫。此外,還有CouchDB
等。
搜索引擎數(shù)據(jù)庫
雖然關(guān)系型數(shù)據(jù)庫采用了索引提升檢索效率,但是針對全文索引效率卻較低。搜索引擎數(shù)據(jù)庫是應(yīng)用在搜索引擎領(lǐng)域的數(shù)據(jù)存儲形式,由于搜索引擎會爬取大量的數(shù)據(jù),并以特定的格式進(jìn)行存儲,這樣在檢索的時(shí)候才能保證性能最優(yōu)。核心原理是“
倒排索引
”
。
典型產(chǎn)品:
Solr
、
Elasticsearch
、
Splunk
等。
列式數(shù)據(jù)庫
列式數(shù)據(jù)庫是相對于行式存儲的數(shù)據(jù)庫,
Oracle
、
MySQL
、
SQL Server
等數(shù)據(jù)庫都是采用的行式存儲 (Row-based),而列式數(shù)據(jù)庫是將數(shù)據(jù)按照列存儲到數(shù)據(jù)庫中,這樣做的好處是可以大量降低系統(tǒng)的 I/O,適合于分布式文件系統(tǒng),不足在于功能相對有限。典型產(chǎn)品:HBase
等。
圖形數(shù)據(jù)庫
圖形數(shù)據(jù)庫,利用了圖這種數(shù)據(jù)結(jié)構(gòu)存儲了實(shí)體(對象)之間的關(guān)系。圖形數(shù)據(jù)庫最典型的例子就是社 交網(wǎng)絡(luò)中人與人的關(guān)系,數(shù)據(jù)模型主要是以節(jié)點(diǎn)和邊(關(guān)系)來實(shí)現(xiàn),特點(diǎn)在于能高效地解決復(fù)雜的關(guān)系問題。 圖形數(shù)據(jù)庫顧名思義,就是一種存儲圖形關(guān)系的數(shù)據(jù)庫。它利用了圖這種數(shù)據(jù)結(jié)構(gòu)存儲了實(shí)體(對象) 之間的關(guān)系。關(guān)系型數(shù)據(jù)用于存儲明確關(guān)系的數(shù)據(jù),但對于復(fù)雜關(guān)系的數(shù)據(jù)存儲卻有些力不從心。如社交網(wǎng)絡(luò)中人物之間的關(guān)系,如果用關(guān)系型數(shù)據(jù)庫則非常復(fù)雜,用圖形數(shù)據(jù)庫將非常簡單。典型產(chǎn)品:Neo4J、
InfoGrid
等。
4.2.3 NoSQL的演變
由于
SQL
一直稱霸
DBMS
,因此許多人在思考是否有一種數(shù)據(jù)庫技術(shù)能遠(yuǎn)離
SQL
,于是
NoSQL
誕生了,但是隨著發(fā)展卻發(fā)現(xiàn)越來越離不開 SQL
。到目前為止
NoSQL
陣營中的
DBMS
都會有實(shí)現(xiàn)類似
SQL
的功能。下面是“NoSQL”
這個(gè)名詞在不同時(shí)期的詮釋,從這些釋義的變化中可以看出
NoSQL
功能的演變
:
1970
:
NoSQL = We have no SQL
1980
:
NoSQL = Know SQL
2000
:
NoSQL = No SQL!
2005
:
NoSQL = Not only SQL
2013
:
NoSQL = No, SQL!
NoSQL
對
SQL
做出了很好的補(bǔ)充,比如實(shí)際開發(fā)中,有很多業(yè)務(wù)需求,其實(shí)并不需要完整的關(guān)系型數(shù)據(jù)庫功能,非關(guān)系型數(shù)據(jù)庫的功能就足夠使用了。這種情況下,使用
性能更高
、
成本更低
的非關(guān)系型數(shù)據(jù)庫當(dāng)然是更明智的選擇。比如:日志收集、排行榜、定時(shí)器等。
4.3 小結(jié)
NoSQL
的分類很多,即便如此,在
DBMS
排名中,還是
SQL
陣營的比重更大,影響力前
5
的
DBMS
中有4 個(gè)是關(guān)系型數(shù)據(jù)庫,而排名前
20
的
DBMS
中也有
12
個(gè)是關(guān)系型數(shù)據(jù)庫。所以說,掌握
SQL
是非常有必要的。整套課程將圍繞 SQL
展開。
5. 關(guān)系型數(shù)據(jù)庫設(shè)計(jì)規(guī)則
關(guān)系型數(shù)據(jù)庫的典型數(shù)據(jù)結(jié)構(gòu)就是
數(shù)據(jù)表
,這些數(shù)據(jù)表的組成都是結(jié)構(gòu)化的(Structured)。 將數(shù)據(jù)放到表中,表再放到庫中。一個(gè)數(shù)據(jù)庫中可以有多個(gè)表,每個(gè)表都有一個(gè)名字,用來標(biāo)識自己。表名具有唯一性。表具有一些特性,這些特性定義了數(shù)據(jù)在表中如何存儲,類似Java?
Python
中
“
類
”
的設(shè)計(jì)。
5.1 表、記錄、字段
E-R
(entity-relationship,實(shí)體
-
聯(lián)系)模型中有三個(gè)主要概念是:
實(shí)體集
、
屬性
、
聯(lián)系集
。
一個(gè)實(shí)體集(class)對應(yīng)于數(shù)據(jù)庫中的一個(gè)表(table),一個(gè)實(shí)體(instance)則對應(yīng)于數(shù)據(jù)庫表中的一行(row),也稱為一條記錄(record)。一個(gè)屬性(attribute)對應(yīng)于數(shù)據(jù)庫表中的一列
(column),也稱為一個(gè)字段(field)。
ORM
思想
(Object Relational Mapping)
體現(xiàn):
數(shù)據(jù)庫中的一個(gè)表
<---> Java
或
Python
中的一個(gè)類
表中的一條數(shù)據(jù)
<--->
類中的一個(gè)對象(或?qū)嶓w)
表中的一個(gè)列
<---->
類中的一個(gè)字段、屬性
(field)
5.2 表的關(guān)聯(lián)關(guān)系
表與表之間的數(shù)據(jù)記錄有關(guān)系
(relationship)
?,F(xiàn)實(shí)世界中的各種實(shí)體以及實(shí)體之間的各種聯(lián)系均用
關(guān)系模型來表示。
四種:一對一關(guān)聯(lián)、一對多關(guān)聯(lián)、多對多關(guān)聯(lián)、自我引用
5.2.1 一對一關(guān)聯(lián)(one-to-one)
在實(shí)際的開發(fā)中應(yīng)用不多,因?yàn)橐粚σ豢梢詣?chuàng)建成一張表。
舉例:設(shè)計(jì)
學(xué)生表
:學(xué)號、姓名、手機(jī)號碼、班級、系別、身份證號碼、家庭住址、籍貫、緊急
聯(lián)系人、
...
拆為兩個(gè)表:兩個(gè)表的記錄是一一對應(yīng)關(guān)系。
基礎(chǔ)信息表
(常用信息):學(xué)號、姓名、手機(jī)號碼、班級、系別
檔案信息表
(不常用信息):學(xué)號、身份證號碼、家庭住址、籍貫、緊急聯(lián)系人、
...
兩種建表原則:
外鍵唯一:主表的主鍵和從表的外鍵(唯一),形成主外鍵關(guān)系,外鍵唯一。
外鍵是主鍵:主表的主鍵和從表的主鍵,形成主外鍵關(guān)系
?
5.2.2 一對多關(guān)系(one-to-many)
常見實(shí)例場景:
客戶表和訂單表
,
分類表和商品表
,
部門表和員工表
。
舉例:
員工表:編號、姓名、
...
、所屬部門
部門表:編號、名稱、簡介
一對多建表原則:在從表
(
多方
)
創(chuàng)建一個(gè)字段,字段作為外鍵指向主表
(
一方
)
的主鍵
?
5.2.3 多對多(many-to-many)
要表示多對多關(guān)系,必須創(chuàng)建第三個(gè)表,該表通常稱為
聯(lián)接表
,它將多對多關(guān)系劃分為兩個(gè)一對多關(guān)系。將這兩個(gè)表的主鍵都插入到第三個(gè)表中。
舉例
1
:學(xué)生
-
課程
學(xué)生信息表
:一行代表一個(gè)學(xué)生的信息(學(xué)號、姓名、手機(jī)號碼、班級、系別
...
)
課程信息表
:一行代表一個(gè)課程的信息(課程編號、授課老師、簡介
...
)
選課信息表
:一個(gè)學(xué)生可以選多門課,一門課可以被多個(gè)學(xué)生選擇
??
舉例
2
:產(chǎn)品
-
訂單
“
訂單
”
表和
“
產(chǎn)品
”
表有一種多對多的關(guān)系,這種關(guān)系是通過與
“
訂單明細(xì)
”
表建立兩個(gè)一對多關(guān)系來
定義的。一個(gè)訂單可以有多個(gè)產(chǎn)品,每個(gè)產(chǎn)品可以出現(xiàn)在多個(gè)訂單中。
產(chǎn)品表
:
“
產(chǎn)品
”
表中的每條記錄表示一個(gè)產(chǎn)品。
訂單表
:
“
訂單
”
表中的每條記錄表示一個(gè)訂單。
訂單明細(xì)表
:每個(gè)產(chǎn)品可以與
“
訂單
”
表中的多條記錄對應(yīng),即出現(xiàn)在多個(gè)訂單中。一個(gè)訂單
可以與
“
產(chǎn)品
”
表中的多條記錄對應(yīng),即包含多個(gè)產(chǎn)品。
舉例
3
:用戶
-
角色
多對多關(guān)系建表原則:需要創(chuàng)建第三張表,中間表中至少兩個(gè)字段,這兩個(gè)字段分別作為外鍵指向
各自一方的主鍵
?
5.3.4 自我引用(Self reference)
?
柚子快報(bào)邀請碼778899分享:數(shù)據(jù)庫基礎(chǔ)篇 《1. 概述》
參考鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。