數據庫設計精要:完整性和范式理論

文章目錄

  • 數據的完整性
    • 實體的完整性
      • 主鍵
    • 域完整性
    • 參照完整性
      • 外鍵
  • 多表設計/多表理論
    • 一對一和一對多
    • 多對多
  • 數據庫的設計范式
    • 第一范式:原子性
    • 第二范式:唯一性
    • 第三范式:不冗余性

數據的完整性

實體的完整性

加主鍵,保證一個表中每一條數據 和其他條目不同。

主鍵

實體完整性確保表中的每一行都是唯一的,并且具有唯一的標識符(通常是一個主鍵)。這意味著在表中不能有重復的行,并且主鍵字段不能包含NULL值。

主鍵

在SQL中,主鍵(Primary Key)是一個或多個字段的組合,用于唯一標識數據庫表中的每一行記錄。其具備以下特點:

  1. 唯一: 主鍵的值必須是唯一的,不允許有重復的值。
  2. 非空:主鍵字段不能包含NULL
  3. 主鍵可以加快查詢速度:主鍵在創建時會自動建立索引,這有助于提高查詢速度。

在一個標準,存儲數據的時候,邏輯上我們認為一行數據是一個不可拆分的整體,要求(不是語法要求,是約定俗成的數據庫使用規范)每一行數據和另一行不要重復,所以我們在上面的創建表的時候,就給了一個id,準備用它來充當“唯一標識”、

主鍵的定義:SQL語法 primary key

我們可以給表中的某一列設置為主鍵,

成為主鍵之后有兩個特點:(1)不允許為null,(2)不允許在表中重復

CREATE TABLE `test`(`id` int  primary key,`name` varchar(255),`gender` char(1)
);-- 或者CREATE TABLE `test`(`id` int,`name` varchar(255),`gender` char(1)primary key(id)
);-- 如果一個表表在創建的時候沒有主鍵,增加主鍵的sql  -- 使用上:沒有任何意義,
-- alter table 表名 add primary key(主鍵列);
alter table user add primary key (id);-- 聯合主鍵:復合主鍵(不建議)。這意味著id和name的組合在table_primary3表中表示主鍵。
CREATE TABLE table_primary3(id INT(11),name VERCHAR(25),job VERCHAR(25),salary FLOAT,PRIMARY KEY(id, name)
);
insert into test values(1, 'zl', '男');	-- 如果有id 1,就會插入報錯。

如果要解決正確的步驟就是先查表,看哪個id沒有使用,然后插入的時候再插入

-- 使用sql語句解決-- 在創建表時
CREATE TABLE `test`(`id` int  primary key AUTO_INCREMENT,`name` varchar(255),`gender` char(1)
);-- 插入
-- 服務器接收sql語句,插入NULL對應id,發現id為主鍵,然后看是否自增,如果不是自增就會報錯,有自增會選取一個自增值
insert into test values(null, 'zl', '男');

域完整性

設計某些列,類型要合適,范圍要合適

儲存數據的時候,存儲的內容要符合列的類型的設置

參照完整性

在關系型數據庫中,一個表的數據可能依賴于另一個表的數據而存在,或者說兩個表的數據存在關聯,所以我們希望這種關聯/參照,具有一致性(要修改的是同步進行變化)。

外鍵只是保證參照完整性的一種方式

外鍵

強制綁定兩個具有參照的表的字段。

也就是將一個表的外鍵綁定為另一個表的主鍵

在對一個表中的鍵進行修改時,可能會另一個關聯表中進行全局掃描,因為要查看在另一個表中是否在使用。并且主鍵的掃描次數會少,性能高一點,但是外鍵的查找性能會低很多。

(修改主鍵值時,數據庫需要檢查所有關聯的外鍵約束。如果外鍵列沒有索引,會導致全表掃描,性能較差;而主鍵由于自帶唯一索引,查找效率較高。因此,在設計數據庫時,應避免頻繁修改主鍵,并為外鍵創建索引以提高查詢性能)

外鍵是 MySQL 中用于建立和加強兩個表數據之間鏈接的一種約束。下面我來介紹它的使用方法:

創建外鍵

在創建表時,可以通過以下方式定義外鍵:

CREATE TABLE 表名(字段1 數據類型,字段2 數據類型,...[CONSTRAINT 外鍵約束名] FOREIGN KEY (外鍵字段名) REFERENCES 主表名(主鍵字段名)
);

舉個例子:

CREATE TABLE department (id INT PRIMARY KEY,name VARCHAR(50)
);CREATE TABLE employee (id INT PRIMARY KEY,name VARCHAR(50),department_id INT,FOREIGN KEY (department_id) REFERENCES department(id)
);

刪除外鍵

可以使用 ALTER TABLE 語句來刪除外鍵約束:

ALTER TABLE 表名 DROP FOREIGN KEY 外鍵約束名;

要留意的是,外鍵約束名可以通過查看表結構獲取,也能在創建外鍵時自行定義。

外鍵約束選項

在外鍵定義中,還能夠添加 ON UPDATE 和 ON DELETE 子句,以此來定義當主表中的記錄被更新或者刪除時,從表應該執行的操作。常見的選項如下:

  • ON DELETE CASCADE:主表記錄刪除時,從表相關記錄自動刪除。
  • ON UPDATE CASCADE:主表記錄更新時,從表相關記錄自動更新。
  • ON DELETE SET NULL:主表記錄刪除時,從表相關字段設為 NULL(要求該字段允許 NULL 值)。
  • ON UPDATE SET NULL:主表記錄更新時,從表相關字段設為 NULL。

示例如下:

CREATE TABLE employee (id INT PRIMARY KEY,name VARCHAR(50),department_id INT,FOREIGN KEY (department_id) REFERENCES department(id)ON DELETE CASCADEON UPDATE CASCADE
);

使用外鍵的注意事項

  1. 主表和從表的字段數據類型要保持一致。
  2. 主表的字段必須是主鍵或者具有唯一約束。
  3. InnoDB 存儲引擎才支持外鍵,MyISAM 不支持。
  4. 外鍵會對數據的插入、更新和刪除操作產生影響,可能會導致性能下降。
  5. 要避免出現循環外鍵約束,不然會造成死鎖的情況。

多表設計/多表理論

一對一和一對多

一對一的表很少見,因為在理論上可以合并為一張表。

多對多

多對多的兩張表一般需要一個中間對照表來連接兩個表之間的關系。

依靠中間表,來將多對多的兩張表,進行連接,對應下面就是:學生信息與對照表是一對多的關系,劇本表與對照表是一對多的關系,學生信息表與劇本表是多對多的關系。

數據庫的設計范式

第一范式:原子性

第二范式:唯一性

不存在部分依賴(不能是組合唯一,就是使用聯合主鍵)必須為某一列作為主鍵設置唯一。

第三范式:不冗余性

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/88076.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/88076.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/88076.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

智能推薦社交分享小程序(websocket即時通訊、協同過濾算法、時間衰減因子模型、熱度得分算法)

🎈系統亮點:websocket即時通訊、協同過濾算法、時間衰減因子模型、熱度得分算法;一.系統開發工具與環境搭建1.系統設計開發工具后端使用Java編程語言的Spring boot框架項目架構:B/S架構運行環境:win10/win11、jdk17小程…

部署NextCloud AIO + Frp + nginx-proxy-manager內網穿透私有云服務

網絡拓撲 假設已有域名為nextcloud.yourhost.com 用戶通過域名https訪問 -> Nginx -> frps -> frpc -> NextCloud 其中Nginx和frps安裝在具有公網IP的服務器上,frpc和NextCloud安裝在內網服務器中。 Nginx配置 通過docker安裝nginx-proxy-manager 外…

【源力覺醒 創作者計劃】文心開源大模型ERNIE-4.5-0.3B-Paddle私有化部署保姆級教程及技術架構探索

一起來輕松玩轉文心大模型吧👉一文心大模型免費下載地址: https://ai.gitcode.com/theme/1939325484087291906 前言 2025年6月30日,百度正式開源文心大模型4.5系列(ERNIE 4.5),涵蓋10款不同參數規模的模型&#xff0…

大模型面試:如何解決幻覺問題

在大模型面試中回答“如何解決幻覺”問題時,需要展現你對問題本質的理解、技術方案的掌握以及工程實踐的洞察。以下是一個結構化的回答框架和關鍵點,供你參考:回答框架:問題理解 -> 解決方案 -> 總結 1. 明確問題&#xff0…

matlab實現五自由度機械臂阻抗控制下的力跟蹤

五自由度機械臂阻抗控制下的力跟蹤,可以實現對力的跟蹤反饋,基于MATLAB的機器人工具箱 eyebot.m , 767 zuakang_wailiraodong.m , 2568 colormp.mat , 682

excel日志表介紹

在Excel中制作“日志表事物”(可理解為記錄事務的日志表格),通常用于系統性追蹤事件、任務、操作或數據變化。以下從表格設計、核心要素、制作步驟、函數應用及場景案例等方面詳細說明,幫助你高效創建和使用事務日志表。 一、日志…

汽車信息安全 -- SHE密鑰更新小細節

之前我們把SHE密鑰更新流程做了梳理,汽車信息安全 -- SHE 密鑰更新流程 但在實際做SHE Emulation的時候還是發現了問題,例如如果想更新SHE Key ID等于30,會如何影響M1-M5的值呢?。 今天就聊聊關于幾家對于SHE Key的管理。 1. N…

Spring Boot配置優先級完全指南:實戰解析覆蓋規則

一、結論Spring Boot 中,位置越靠后優先級越高,外部配置壓倒內部配置,命令行參數擁有最高優先權。案例: 在一次生產事故中,某團隊通過 application-prod.properties 將服務端口設為 9000,但某運維人員在啟動…

嵌入式數據庫sqlite測試程序

繼上篇對嵌入式數據庫sqlite的移植和注意項,以及使用命令行測試之后,本篇對其進行了更進一步的程序測試,以備近期在項目中使用。測試程序及說明如下:/**************** 相關函數說明 ******************/ /* (1)sqlite3_open的函…

【學習篇】SQL復雜查詢學習

要求:能對千萬行級別的大表優化讀寫效率。 難點:如何創建千萬行級別的大表 MySQL數據庫的高效查詢不僅依賴于合理的表結構和索引設計,還需要掌握高級查詢技巧和性能優化方法。 數據表與數據表之間關系三種:實體之間關系 多對多…

Sequential Predictive Modeling of Clinical Trial Outcome with Meta-Learning解讀

SPOT(Sequential Predictive Modeling of Clinical Trial Outcome with Meta-Learning)模型是用于臨床試驗結果預測的模型, 借鑒了模型無關元學習(MAML,Model-Agnostic Meta-Learning)的框架,將模型參數分為全局共享參數和任務特定參數,以平衡跨任務泛化與任務內適配:…

優先選擇列表而非數組及泛型類型的使用

數組與泛型的核心差異 協變性與不變性 數組采用協變(covariant)類型規則:若Sub是Super的子類型,則數組類型Sub[]也是Super[]的子類型。這種設計允許以下代碼通過編譯: Object[] objectArray = new Long[1]; // 編譯通過 objectArray[0

自動化Prompt生成平臺的研發體系設計

一份輕松不啰嗦的自動化Prompt平臺研發攻略 📑 目錄 一、項目背景二、平臺整體架構設計三、核心功能模塊解析四、自動化流程設計五、樣式與跨平臺規范六、總結與展望 一、項目背景 在大模型應用爆發的今天,不寫Prompt的工程師,正在變成“寫…

[Swarm] 上下文變量 | 接入function功能調用 | Mcp

第3章:上下文變量 歡迎回到swarm! 在前兩章中,我們學習了作為對話指揮者的Swarm框架和具備指令與技能的專用AI角色智能體。(智能體就相當于是給用戶問題 已經寫好了的提示詞,在用戶提問時自動加入,以此來給用戶更好的…

【Unity開發】Unity實現第一人稱視角與第三人稱視角切換功能

一、效果展示 第三人稱視角:固定攝像機,無任何操作 第一人稱視角:用戶可以通過wsad進行前后左右移動,qe進行上升下降操作 不同視角之間切換會有一個過渡動畫,切換第一視角的初始位置始終為原點(0,0,0&am…

2025全球數字經濟大會—云智算安全論壇暨第三屆“SecGo論壇”成功召開!共筑安全新生態

2025年7月3日,由全球數字經濟大會組委會主辦,中國信息通信研究院、中國通信標準化協會承辦的全球數字經濟大會—云智算安全論壇暨第三屆“SecGo論壇”在京召開。北京市經濟和信息化局副局長顧瑾栩、中國通信標準化協會副理事長兼秘書長代曉慧、中國信通院…

KingbaseES聚焦產品上線:金倉數據庫在線體驗平臺上線,開啟數據庫實踐新征程

KingbaseES聚焦產品上線:金倉數據庫在線體驗平臺上線,開啟數據庫實踐新征程KingbaseES 在線體驗平臺是為數據庫使用者、開發者、架構師及 DBA 打造的輕量化實踐平臺,無需本地安裝數據庫環境,通過瀏覽器即可快速上手,降…

LLMs之DeepSeek:AI模型市場深度分析:DeepSeek的挑戰與機遇,模型市場份額、Token經濟學與未來發展

LLMs之DeepSeek:AI模型市場深度分析:DeepSeek的挑戰與機遇,模型市場份額、Token經濟學與未來發展 導讀:該文章主要分析了中國大語言模型DeepSeek R1發布150天后的市場表現、Token經濟學的影響以及AI模型市場的競爭格局。文章指出&…

服裝零售企業跨區域運營難題破解方案

在服裝零售行業,本地化業務系統因承載庫存、銷售等核心數據,成為眾多企業的選擇。然而對于門店分布廣、規模較大的服裝銷售商而言,總部系統與各地門店的遠程連接卻面臨挑戰:員工遠程辦公效率低、POS機數據同步滯后、跨區域監管難度…

- 思考小記

對于 分布式系統,我還是抱有敬畏之心的,因為其內容過于龐大;我在學習基礎編程的時候走過一個最大的彎路就是過度追求技術而忽視了基礎編碼能力,當時在學習springboot的時候,覺得那些新內容都是那么新奇高大上&#xff…