哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

輕松設(shè)計關(guān)系型數(shù)據(jù)庫教程

5jek_harmonyos ? 來源:CSDN技術(shù)社區(qū) ? 作者:pikaxiao ? 2021-07-13 09:13 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文討論關(guān)系數(shù)據(jù)庫設(shè)計相關(guān)的一些內(nèi)容,涉及關(guān)系模型,表結(jié)構(gòu)設(shè)計等內(nèi)容,以學(xué)生選修課程講述設(shè)計過程,在盡量講清楚設(shè)計要領(lǐng)的前提下,簡化設(shè)計內(nèi)容。

本文基于MySQL數(shù)據(jù)庫為基礎(chǔ),適合有一定關(guān)系型數(shù)據(jù)庫基礎(chǔ)的人閱讀。

實體-關(guān)系模型(E-R)首先搞清楚什么是E-R數(shù)據(jù)模型?它有什么用?

E-R模型在將現(xiàn)實世界中事實的含義和相互關(guān)聯(lián)映射到概念模式方面非常有用,因此,許多數(shù)據(jù)庫設(shè)計工具都利用了E-R模型的概念。E-R模型所采用的三個主要概念是:實體集、關(guān)系集和屬性。

實體:實體是世界中可以區(qū)別于其他對象的“事件”或者“物體”,例如,學(xué)校里的每個學(xué)生、學(xué)生選修的每門課程等都是一個實體。

屬性:屬性是實體集中每個成員具有的描述性性質(zhì)。例如,學(xué)生的姓名,學(xué)號等。

實體集:實體集就是就有相同類型及屬性的實體集合,比如,學(xué)校里的所有學(xué)生,學(xué)生選修的所有課程等。

關(guān)系:關(guān)系是多個實體間的相互關(guān)聯(lián)。例如,小明選修語文課程。

關(guān)系集:關(guān)系集是同類關(guān)系的集合。例如,所用學(xué)生選修課程的集合。

其中,(學(xué)號,姓名,年齡,性別)為學(xué)生的屬性,(成績)為選修關(guān)系的屬性,(課程號,課程名,學(xué)分)為課程的屬性。學(xué)生和課程之間的關(guān)系是多對多,即一個學(xué)生可以選擇多門課程,一門課程可以被多個學(xué)生選修。

關(guān)系表設(shè)計從上面的E-R圖,我們一眼就能看出他們之間的聯(lián)系,那該如何設(shè)計關(guān)系模式呢?

我們要知道,關(guān)系數(shù)據(jù)庫設(shè)計的目的是為了生成一組關(guān)系模式,使我們能夠既不必存儲不必要的冗余信息,又能方便地獲取信息。為了是我們方便的達到這個目的,范式設(shè)計應(yīng)運而生。

Boyce-Codd范式

我們所知道的令人滿意的范式之一是Boyce-Codd范式(BCNF)。如果對F+中所有形如 α→β 的函數(shù)依賴,其中 α?R 且 β?R,下面的定義至少有一個成立:

α→β 是平凡函數(shù)依賴(即 β ? α)。(一般來說,平凡函數(shù)依賴并沒有討論意義,討論的都是非平凡函數(shù)依賴,即 β ?? α 的情況)

α 是模式R的超碼。

考慮如下關(guān)系模式及其相應(yīng)的函數(shù)依賴:

學(xué)生 = (學(xué)號,姓名,年齡,性別)

學(xué)號 → 姓名 年齡 性別

課程 = (課程號,課程名,學(xué)分)

課程號 → 課程名 學(xué)分

選修 = (學(xué)號,課程號,成績)

學(xué)號 課程號 → 成績

以上模式均屬于BCNF。就拿第一組關(guān)系模式來說,學(xué)生上僅有的非平凡函數(shù)依賴,箭頭左側(cè)是學(xué)號,學(xué)號是該模式的一個候選碼(候選碼屬于超碼的子集),沒有破壞BCNF的定義。

其實并不是每個BCNF都能保持函數(shù)依賴的,例如:

Banker-schema = (branch-name,customer-name,banker-name)

它表示的是一個客戶在某一分支機構(gòu)有一個銀行賬戶負責人。它要求滿足的函數(shù)依賴集F為

banker-name → branch-name

branch-name customer-name → banker-name

顯然,Banker-schema不屬于BCNF,因為 banker-name 不是超碼。

我們可以將它分解得到如下的BCNF:

Banker-branch-schema = (banker-name,branch-name)

Customer-banker-schema = (customer-name,banker-name)

分解后的模式只保持了banker-name → branch-name,而branch-name customer-name → banker-name的依賴沒有保持。

第三范式

當我們不能同時滿足以下三個設(shè)計目標:

BCNF。

無損連接。

保持函數(shù)依賴。

我們可以放棄BCNF而接受相對較弱的第三范式(3NF)。因為3NF總能找到無損連接并保持依賴的分解。

具有函數(shù)依賴即F的關(guān)系模式R屬于3NF,只要F+中所有形如 α→β 的函數(shù)依賴,其中 α?R 且 β?R,下面的定義至少有一個成立:

α→β 是平凡函數(shù)依賴(即 β ? α)。

α 是模式R的超碼。

β - α 中的每個屬性 A 都包含在R的候選碼中。

回到Banker-schema的例子中,我們已經(jīng)看到了沒能將該關(guān)系模式轉(zhuǎn)化成BCNF而又保持依賴和無損連接的分解,但改模式屬于3NF。在Banker-schema中,候選碼是{branch-name,customer-name},所以Banker-schema上不包含候選碼的就只有banker-name。

而形如 α → banker-name 的非平凡函數(shù)依賴都是以{branch-name,customer-name}作為 α 的一部分。由于{branch-name,customer-name}是候選碼,所以符合3NF的定義。

每個BCNF都屬于3NF,因為BCNF的約束比3NF更嚴格。

存儲引擎的選擇關(guān)系模式一但確定,基本的數(shù)據(jù)庫表結(jié)構(gòu)就確定了,接下來就是表結(jié)構(gòu)的詳細設(shè)計了,這里先從存儲引擎開始,MySQL提供的各種存儲引擎都是根據(jù)不同的用例設(shè)計的。

最常用的兩種存儲引擎:MyISAM和InnoDB。

MyISAM:MySQL 5.5.5以前,MyISAM作為MySQL的默認存儲引擎。

InnoDB:MySQL 5.5.5以后,InnoDB作為MySQL的默認存儲引擎。

何如選擇?

選擇標準: 根據(jù)應(yīng)用特點選擇合適的存儲引擎,對于復(fù)雜的應(yīng)用系統(tǒng)可以根據(jù)實際情況選擇多種存儲引擎進行組合。但是要知道組合使用的缺點:

InnoDB和非InnoDB存儲引擎的組合對比,僅使用InnoDB存儲引擎可以簡化備份和恢復(fù)操作。MySQL Enterprise Backup對使用InnoDB存儲引擎的所有表進行熱備份。對于使用MyISAM或其他非InnoDB存儲引擎的表,它會執(zhí)行“熱”備份,數(shù)據(jù)庫會繼續(xù)運行,但這些表在備份時不能修改。

下面是常用存儲引擎的適用環(huán)境:

InnoDB:事務(wù)型業(yè)務(wù)場景首選。

MyISAM:非事務(wù)型的大多數(shù)業(yè)務(wù)場景。

Memory:數(shù)據(jù)保存到內(nèi)存中,能提供極速的訪問速度。(個人覺得可以使用Redis等NoSQL數(shù)據(jù)庫代替)

字符集選擇存儲引擎之后就是確定字符集,字符集的選擇十分重要,不管是MySQL還是Oracle,如果在數(shù)據(jù)庫創(chuàng)建階段沒有正確選擇字符集,那么在后期需要更換字符集的時候?qū)⒁冻龈甙旱拇鷥r。

如何選擇?

建議在能夠完全滿足應(yīng)用當下和未來幾年發(fā)展的前提下,盡量使用小的字符集。應(yīng)為更小的字符集意味著能夠節(jié)省空間、減少網(wǎng)絡(luò)傳輸字節(jié)數(shù),同時由于存儲空間小間接的提升了系統(tǒng)的性能。

不同的數(shù)據(jù)庫有不同的字符集應(yīng)用級別,分別為服務(wù)器級別、庫級別、表級別、字段級別,通常推薦使用庫級別或者表級別。因為庫級別或者表級別在保有靈活性的同時,兼顧數(shù)據(jù)間字符集的統(tǒng)一,這可以給開發(fā)省去很多處理字符集的麻煩。

數(shù)據(jù)類型的選擇選擇原則

前提:使用合適的存儲引擎。

選擇原則:為了獲得最佳的存儲,您應(yīng)該在所有情況下嘗試使用最精確的類型。

固定長度和可變長度

char 與 varchar

請注意上表中最后一行的值只適用不使用嚴格模式時;如果 MySQL 運行在嚴格模式,超過列 長度的值不保存,并且會出現(xiàn)錯誤。

從 CHAR(4)和 VARCHAR(4)列檢索的值并不總是相同,因為檢索時從 CHAR 列刪除了尾部的空 格。通過下面的例子說明該差別:

mysql》 CREATE TABLE vc (v VARCHAR(4), c CHAR(4));

Query OK, 0 rows affected (0.01 sec)

mysql》 INSERT INTO vc VALUES (‘a(chǎn)b ’, ‘a(chǎn)b ’);

Query OK, 1 row affected (0.00 sec)

mysql》 SELECT CONCAT(‘(’, v, ‘)’), CONCAT(‘(’, c, ‘)’) FROM vc;

+---------------------+---------------------+

| CONCAT(‘(’, v, ‘)’) | CONCAT(‘(’, c, ‘)’) |

+---------------------+---------------------+

| (ab ) | (ab) |

+---------------------+---------------------+

1 row in set (0.06 sec)

對于InnoDB數(shù)據(jù)表,內(nèi)部的行格式?jīng)]有區(qū)分固定長度和可變長度列,所有數(shù)據(jù)化行都使用指向數(shù)據(jù)列值的頭指針,因此在本質(zhì)上,使用固定長度的CHAR列不一定比使用可變長度的VARCHAR列要好。

因為,主要的性能因數(shù)是數(shù)據(jù)行使用的存儲總量。對于占用空間來說,CHAR總是大于等于VARCHAR,所以,使用VARCHAR來最小化行數(shù)據(jù)的存儲總量,進而減少磁盤I/O頻率。

text 和 blob

在使用text或者blob類型的字段是需要注意一下幾點,以便獲得更好的性能:

執(zhí)行大量的刪除和更新操作后,會留下很”空洞“,需要定期optimize table進行碎片整理;

避免查詢大型的text和blob。查詢大型的text和blob會使一頁能裝下的數(shù)據(jù)量減少,增加磁盤I/O壓力。

把text和blob分離到單獨的表中。這會把原來表中的數(shù)據(jù)列轉(zhuǎn)變?yōu)楦痰墓潭ㄩL度的數(shù)據(jù)行格式,這個十分有用。

浮點數(shù)和定點數(shù)

在MySQL中float、double是浮點數(shù),decimal是定點數(shù)。

浮點數(shù)優(yōu)勢:在長度一定的情況下,浮點數(shù)能表示更大的數(shù)據(jù)范圍。

浮點數(shù)缺點:精度問題。

友情提醒:在有關(guān)金錢交易方面浮點數(shù)慎用?。。?/p>

整數(shù)

MySQL支持SQL標準整數(shù)類型INTEGER(或INT)和SMALLINT。作為標準的擴展,MySQL還支持整數(shù)類型TINYINT、MEDIUMINT和BIGINT。下表顯示了每個整數(shù)類型所需的存儲空間和范圍。

索引設(shè)計設(shè)計原則

搜索的索引列,不一定是所要選擇的列。最適合索引的列是出現(xiàn)在 WHERE 子 句中的列,或連接子句中指定的列,而不是出現(xiàn)在 SELECT 關(guān)鍵字后的選擇列表中的列。

使用惟一索引。對于惟一值的列,索引的效果最好,而具有多個 重復(fù)值的列,其索引效果最差。

使用短索引。如果對字符串列進行索引,應(yīng)該指定一個前綴長度 。例如,如果有一個 CHAR(200) 列,如果在前 10 個或 20 個字符內(nèi),多數(shù)值是惟一的, 那么就不要對整個列進行索引。

利用最左前綴。每個額外的索 引都要占用額外的磁盤空間,并降低寫操作的性能。

不要過度索引。

考慮在列上進行的比較類型。如果是在列上做函數(shù)運算,對其進行索引將毫無意義。

Student中姓名的長度是40,這里把外國人也考慮進來了;

Student中性別定義成枚舉,主要是枚舉意義簡明;

Student中沒有存年齡,而存儲的出生日期,是因為年齡并不是一成不變的,并且能夠通過出生日期正確計算。

SC中成績使用的是double而不采用decimal,主要是因為成績并不需要那么高的精確度。

SC中(sno,cno)作為聯(lián)合主鍵而不是獨立主鍵,由于現(xiàn)階段markdown無法合拼行,所以無法編輯。

參考(美)Abraham Silberschatz等。數(shù)據(jù)庫系統(tǒng)概念。北京:機械工業(yè)出版社,2012

MySQL 5.7 Reference Manual

[eimhe.com]網(wǎng)易技術(shù)部的MySQL中文資料。

(感謝閱讀,希望對你所有幫助)來源:blog.csdn.net/qq_36011946/article/details/105305063

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)庫
    +關(guān)注

    關(guān)注

    7

    文章

    4078

    瀏覽量

    68519

原文標題:如何設(shè)計關(guān)系型數(shù)據(jù)庫?

文章出處:【微信號:harmonyos_developer,微信公眾號:harmonyos_developer】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    瀚高數(shù)據(jù)庫深度參編國家標準《信息技術(shù) 云原生關(guān)系數(shù)據(jù)庫管理系統(tǒng)技術(shù)要求》正式發(fā)布

    濟南2026年4月15日 /美通社/ -- 近日,國家市場監(jiān)督管理總局、國家標準化管理委員會正式發(fā)布國家標準 GB/T 47343-2026《信息技術(shù) 云原生關(guān)系數(shù)據(jù)庫管理系統(tǒng)技術(shù)要求》。作為我國
    的頭像 發(fā)表于 04-15 16:41 ?305次閱讀

    TiDB分布式數(shù)據(jù)庫運維實踐

    TiDB 是 PingCAP 開發(fā)的開源分布式關(guān)系數(shù)據(jù)庫,兼容 MySQL 5.7 協(xié)議,底層存儲基于 TiKV(分布式 KV 存儲)和 RocksDB。它解決的核心問題是:當單機 MySQL 無法承載
    的頭像 發(fā)表于 03-04 15:44 ?260次閱讀

    恒訊科技解析:如何安裝MySQL并創(chuàng)建數(shù)據(jù)庫

    安裝和管理MySQL不必復(fù)雜。只需幾分鐘,你就能在Linux服務(wù)器上搭建MySQL,創(chuàng)建第一個數(shù)據(jù)庫,甚至自動化備份——同時確保數(shù)據(jù)安全有序。 什么是 MySQL? MySQL 是一個關(guān)系
    的頭像 發(fā)表于 01-14 14:25 ?318次閱讀

    國產(chǎn)數(shù)據(jù)庫的AI戰(zhàn)事

    國產(chǎn)數(shù)據(jù)庫硝煙再起,Vastbase V100構(gòu)筑企業(yè)智能基座
    的頭像 發(fā)表于 10-24 20:45 ?4347次閱讀
    國產(chǎn)<b class='flag-5'>數(shù)據(jù)庫</b>的AI戰(zhàn)事

    數(shù)據(jù)庫性能優(yōu)化指南

    作為一名在大廠摸爬滾打多年的運維老兵,我見過太多因為數(shù)據(jù)庫性能問題導(dǎo)致的生產(chǎn)事故。今天分享一套完整的數(shù)據(jù)庫優(yōu)化方法論,從SQL層面到硬件配置,幫你徹底解決性能瓶頸!
    的頭像 發(fā)表于 08-18 11:21 ?869次閱讀

    數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—服務(wù)器異常斷電導(dǎo)致Oracle數(shù)據(jù)庫故障的數(shù)據(jù)恢復(fù)案例

    Oracle數(shù)據(jù)庫故障: 某公司一臺服務(wù)器上部署Oracle數(shù)據(jù)庫。服務(wù)器意外斷電導(dǎo)致數(shù)據(jù)庫報錯,報錯內(nèi)容為“system01.dbf需要更多的恢復(fù)來保持一致性”。該Oracle數(shù)據(jù)庫
    的頭像 發(fā)表于 07-24 11:12 ?815次閱讀
    <b class='flag-5'>數(shù)據(jù)庫</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—服務(wù)器異常斷電導(dǎo)致Oracle<b class='flag-5'>數(shù)據(jù)庫</b>故障的<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例

    三款主流國產(chǎn)數(shù)據(jù)庫的技術(shù)特點

    隨著數(shù)字經(jīng)濟的快速發(fā)展和數(shù)據(jù)安全要求的提升,國產(chǎn)數(shù)據(jù)庫正迎來前所未有的發(fā)展機遇。在信創(chuàng)浪潮推動下,達夢數(shù)據(jù)庫、TiDB、華為高斯數(shù)據(jù)庫等國產(chǎn)數(shù)據(jù)庫
    的頭像 發(fā)表于 07-14 11:08 ?1310次閱讀

    企業(yè)級MySQL數(shù)據(jù)庫管理指南

    在當今數(shù)字化時代,MySQL作為全球最受歡迎的開源關(guān)系數(shù)據(jù)庫,承載著企業(yè)核心業(yè)務(wù)數(shù)據(jù)的存儲與處理。作為數(shù)據(jù)庫管理員(DBA),掌握MySQ
    的頭像 發(fā)表于 07-09 09:50 ?855次閱讀

    遠程訪問內(nèi)網(wǎng)MySQL數(shù)據(jù)庫?這個方案更簡單

    ,開發(fā)者和運維人員趕緊看過來! 為什么需要這樣做? 遠程辦公必備:無需 VPN,在家或外出時也能輕松連接公司內(nèi)網(wǎng)數(shù)據(jù)庫 靈活開發(fā)測試:開發(fā)人員可遠程連接本地數(shù)據(jù)庫進行調(diào)試,提高協(xié)作效率 數(shù)據(jù)
    的頭像 發(fā)表于 07-04 18:06 ?984次閱讀
    遠程訪問內(nèi)網(wǎng)MySQL<b class='flag-5'>數(shù)據(jù)庫</b>?這個方案更簡單

    數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—MongoDB數(shù)據(jù)庫文件丟失的數(shù)據(jù)恢復(fù)案例

    MongoDB數(shù)據(jù)庫數(shù)據(jù)恢復(fù)環(huán)境: 一臺操作系統(tǒng)為Windows Server的虛擬機上部署MongoDB數(shù)據(jù)庫。 MongoDB數(shù)據(jù)庫故障: 工作人員在MongoDB服務(wù)仍
    的頭像 發(fā)表于 07-01 11:13 ?754次閱讀
    <b class='flag-5'>數(shù)據(jù)庫</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—MongoDB<b class='flag-5'>數(shù)據(jù)庫</b>文件丟失的<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例

    數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—SQL Server數(shù)據(jù)庫被加密如何恢復(fù)數(shù)據(jù)?

    SQL Server數(shù)據(jù)庫故障: SQL Server數(shù)據(jù)庫被加密,無法使用。 數(shù)據(jù)庫MDF、LDF、log日志文件名字被篡改。
    的頭像 發(fā)表于 06-25 13:54 ?807次閱讀
    <b class='flag-5'>數(shù)據(jù)庫</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—SQL Server<b class='flag-5'>數(shù)據(jù)庫</b>被加密如何恢復(fù)<b class='flag-5'>數(shù)據(jù)</b>?

    oracle數(shù)據(jù)恢復(fù)—oracle數(shù)據(jù)庫誤執(zhí)行錯誤truncate命令如何恢復(fù)數(shù)據(jù)?

    oracle數(shù)據(jù)庫誤執(zhí)行truncate命令導(dǎo)致數(shù)據(jù)丟失是一種常見情況。通常情況下,oracle數(shù)據(jù)庫誤操作刪除數(shù)據(jù)只需要通過備份恢復(fù)數(shù)據(jù)
    的頭像 發(fā)表于 06-05 16:01 ?1688次閱讀
    oracle<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—oracle<b class='flag-5'>數(shù)據(jù)庫</b>誤執(zhí)行錯誤truncate命令如何恢復(fù)<b class='flag-5'>數(shù)據(jù)</b>?

    SQLSERVER數(shù)據(jù)庫是什么

    SQL Server 是由微軟公司開發(fā)的一款 關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS) ,用于存儲、管理和檢索結(jié)構(gòu)化數(shù)據(jù)。它是企業(yè)級應(yīng)用中廣泛使用的數(shù)據(jù)庫
    的頭像 發(fā)表于 05-26 09:19 ?1280次閱讀

    MySQL數(shù)據(jù)庫是什么

    MySQL數(shù)據(jù)庫是一種 開源的關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS) ,由瑞典MySQL AB公司開發(fā),后被Oracle公司收購。它通過結(jié)構(gòu)化查詢語言(SQL)進行
    的頭像 發(fā)表于 05-23 09:18 ?1404次閱讀

    SEGGER emFile支持大型數(shù)據(jù)庫

    SEGGER宣布emFile對大型數(shù)據(jù)庫的支持,集成了SQLite,方便與SEGGER的BigFAT和微軟的exFAT一起使用。
    的頭像 發(fā)表于 04-23 15:51 ?924次閱讀
    增城市| 新安县| 西丰县| 苏尼特左旗| 宜良县| 修文县| 星子县| 饶阳县| 甘孜县| 上饶市| 镶黄旗| 蒲城县| 平潭县| 通渭县| 闸北区| 波密县| 绥化市| 望城县| 石嘴山市| 驻马店市| 方山县| 乳山市| 鲁甸县| 景宁| 江西省| 甘德县| 雷山县| 陇川县| 屯门区| 宁都县| 杭锦后旗| 文登市| 巫山县| 桃园市| 西宁市| 清原| 同仁县| 班戈县| 东安县| 慈利县| 汝阳县|