數據庫中表的設計規范

表的結構

列:由多個字段構成,每個字段存儲單一數據項,列的先后順序對表沒有影響

行:記錄,一個表中不能存在完全相同的兩行,行的順序對表沒有影響

主鍵:primary key 表中的一列或多列組合起來唯一的標識表中的一條記錄

主鍵的選取:

- 業務(邏輯)主鍵:選擇使用業務中有實際意義的一個字段做主鍵,比如身份證號碼,手機號...

- 代理主鍵:使用一個無意義的數值: 自增長的數值, UUID(通用唯一識別碼)

外鍵:foreign key 用于連接另外一張表,(通常)是連接表中的主鍵或唯一鍵

外鍵約束:數據的一致性

?關系范式:一套約束、確保多個表結構的設計符合關系模型

- 1NF:每一列都是不可再分的原子數據項,即表中的每個字段都是不可分割的基本數據項,不能包含多個值。

當數據為1對多時,可以提取為另外一個表,嵌入原表中

不符合1NF:

用戶表
user_id | user_name | phone_numbers
1       | Alice     | 1234567890, 0987654321

符合1NF:

用戶表
user_id | user_name
1       | Alice用戶電話表
user_id | phone_number
1       | 1234567890
1       | 0987654321

- 2NF:主鍵依賴,非主鍵字段必須完全依賴于主鍵字段,不能部分依賴于主鍵。否則要提取出另外的表

不符合2NF:

訂單表
order_id | product_id | product_name | quantity
1        | 101        | Product A    | 2
1        | 102        | Product B    | 3在這個表中,product_name 只依賴于 product_id,而不是整個主鍵 (order_id, product_id)

符合2NF:

訂單表
order_id | product_id | quantity
1        | 101        | 2
1        | 102        | 3產品表
product_id | product_name
101        | Product A
102        | Product B

- 3NF:表中的非主鍵字段不能存在傳遞依賴關系,即非主鍵字段之間不能存在依賴關系。當非鍵之間有依賴時,可以提取為另外的表

不符合3NF:

學生表
student_id | student_name | department_name | department_head
1          | Alice        | Computer Sci    | Dr. Smith

符合3NF:

學生表
student_id | student_name | department_id
1          | Alice        | 1部門表
department_id | department_name | department_head
1             | Computer Sci    | Dr. Smith

意義

- 減少冗余(一些數據只存一次,而非存儲多次)

- 保證數據完整性、一致性

- 簡化數據維護

- 提高查詢效率(當不符合范式時效率更高,則會由反范式的操作)

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

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

相關文章

[學習]C語言指針函數與函數指針詳解(代碼示例)

C語言指針函數與函數指針詳解 文章目錄 C語言指針函數與函數指針詳解一、引言二、指針函數(函數返回指針)定義與語法典型應用場景注意事項 三、函數指針(指向函數的指針)定義與聲明初始化與調用賦值方式調用語法 高級應用回調函數…

Python 實現桶排序詳解

1. 核心原理 桶排序是一種非比較型排序算法,通過將數據分配到多個“桶”中,每個桶單獨排序后再合并。其核心步驟包括: 分桶:根據元素的范圍或分布,將數據分配到有限數量的桶中。桶內排序:對每個非空桶內的…

brep2seq 論文筆記

Brep2Seq: a dataset and hierarchical deep learning network for reconstruction and generation of computer-aided design models | Journal of Computational Design and Engineering | Oxford Academic 這段文本描述了一個多頭自注意力機制(MultiHead Attenti…

在 LangGraph 中集成 Mem0 記憶系統教程

簡介 LangGraph 是一個強大的對話流程編排框架,而 Mem0 則是一個高效的記憶系統。本教程將介紹如何將兩者結合,創建一個具有記憶能力的客服助手系統。 環境準備 首先安裝必要的依賴: pip install langgraph mem0 langchain openai基礎配置…

ceph 報錯 full ratio(s) out of order

full ratio(s) out of order你遇到的錯誤信息: full ratio(s) out of order說明你設置的 OSD 空間使用閾值之間的數值順序不正確,即: nearfull_ratio ≤ backfillfull_ratio ≤ full_ratio ≤ osd_failsafe_full_ratio如果它們的關系不滿足這個順序,Ceph 就會報這個錯誤。…

NB-IoT NPUSCH(三)-資源映射

資源映射單獨做一章節,是因為NPUSCH的資源映射比較復雜。與LTE不同,為了提高數據傳輸的質量,NB-IoT的數據會有重復傳輸。NPUSCH一開始生成的TBS只與子載波個數、RU個數有關,與重復次數沒有關系。初始產生的數據為 個時隙&#xff…

華為OD機試真題——荒島求生(2025B卷:200分)Java/python/JavaScript/C/C++/GO最佳實現

2025 B卷 200分 題型 本專欄內全部題目均提供Java、python、JavaScript、C、C++、GO六種語言的最佳實現方式; 并且每種語言均涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、3個測試用例以及綜合分析; 本文收錄于專欄:《2025華為OD真題目錄+全流程解析+備考攻略+經驗分…

centos7安裝MySQL(保姆級教學)

在 Linux 系統的軟件管理中,YUM(Yellowdog Updater, Modified)包管理器是不可或缺的工具,而 YUM 源的選擇與配置直接影響著軟件安裝與更新的效率。本文將深入解析網絡 YUM 源的分類,詳細介紹如何使用知名平臺提供的 YU…

DeepSeek 賦能教育游戲化:AI 重構學習體驗的技術密碼

目錄 一、引言:教育游戲化與 DeepSeek 的相遇二、DeepSeek 技術剖析2.1 核心架構2.2 關鍵技術 三、教育游戲化設計的奧秘3.1 概念與意義3.2 常見方法與元素3.3 成功案例借鑒 四、DeepSeek 在教育游戲化設計中的多面應用4.1 個性化學習路徑打造4.2 智能教學輔助工具4…

WPF命令與MVVM模式:打造優雅的應用程序架構

?? 打造優雅的應用程序架構 1. ?? 命令系統基礎1.1 ?? 為什么需要命令?1.2 ??? ICommand接口1.3 ??? 實現基本命令2. ??? MVVM模式詳解2.1 ?? MVVM三大組件2.2 ??? 創建ViewModel基類2.3 ?? 典型ViewModel示例3. ?? 命令綁定實戰3.1 ?? View中的命令…

真實案例拆解:智能AI客服系統中的兩類緩存協同

真實案例拆解:智能客服系統中的兩類緩存協同 在AI客服系統中,“響應速度”與“語義準確性”是一對天然的矛盾體。為了實現秒級應答與智能理解的雙重目標,系統需要在技術架構中融合精確命中的緩存系統(如Redis)與模糊語義識別的向量數據庫(如Milvus)。這兩種能力的結合,…

FastAPI與MongoDB分片集群:異步數據路由與聚合優化

title: FastAPI與MongoDB分片集群:異步數據路由與聚合優化 date: 2025/05/26 16:04:31 updated: 2025/05/26 16:04:31 author: cmdragon excerpt: FastAPI與MongoDB分片集群集成實戰探討了分片集群的核心概念、Motor驅動配置技巧、分片數據路由策略、聚合管道高級應用、分片…

一起學數據結構和算法(三)| 字符串(線性結構)

字符串(String) 字符串是由字符組成的有限序列,在計算機中通常以字符數組形式存儲,支持拼接、查找、替換等操作。 簡介 字符串是計算機科學中最常用的數據類型之一,由一系列字符組成的有限序列。在大多數編程語言中&…

2025電工杯數學建模競賽A題 光伏電站發電功率日前預測問題 保姆級教程講解|模型講解

完整內容請看文章最下面的推廣群 2025電工杯數學建模競賽 A題保姆級分析完整思路代碼數據教學 2025電工杯 A題保姆級教程思路分析 DS數模-全國大學生電工數學建模(電工杯) A題保姆級教程思路分析 A題:光伏電站發電功率日前預測問題 下面我…

React Native 拼音及拼音首字母搜索組件開發

寫在前面 “用戶說找不到聯系人?拼音搜索功能必須安排上!” —— 當產品經理第N次提出這個需求時,我意識到需要開發一個強大的拼音搜索組件。本文將詳細介紹如何開發一個支持拼音匹配、首字母搜索的React Native搜索組件,讓你的應…

springboot--實戰--大事件--用戶接口開發

開發模式&環境搭建 開發模式: 前后端分離開發 前端程序員寫前端頁面,后端程序員寫后端的接口,前端工程發送請求來訪問后臺,后臺處理完請求后要給前端相應對應的數據。 還需要一套標準來約束即接口文檔,在接口文…

html使用JS實現賬號密碼登錄的簡單案例

目錄 案例需求 思路 錯誤案例及問題 修改思路 案例提供 所需要的組件 <input>標簽&#xff0c;<button>標簽&#xff0c;<script>標簽 詳情使用參考&#xff1a;HTML 教程 | 菜鳥教程 案例需求 編寫一個程序&#xff0c;最多允許用戶嘗試登錄 3 次。…

小米玄戒O1架構深度解析(一):十核異構設計與緩存層次詳解

前言 這兩天&#xff0c;小米的全新SOC玄戒O1橫空出世&#xff0c;引發了科技數碼圈的一次小地震&#xff0c;那么小米的這顆所謂的自研SOC&#xff0c;內部究竟有著什么不為人知的秘密呢&#xff1f;我們一起一探究竟。 目錄 前言1 架構總覽1.1 基本構成1.2 SLC缺席的原因探…

VSCode如何像Pycharm一樣“““回車快速生成函數注釋文檔?如何設置文檔的樣式?autoDocstring如何設置自定義模板?

文章目錄 ?? 介紹 ???? 演示環境 ???? 讓VSCode擁有PyCharm級注釋生成能力 ???? 實現方案??? 備用方案?? 自定義注釋文檔格式樣式 ???? 切換主流注釋風格? 深度自定義模板??? 類型提示與注釋聯動優化?? 相關鏈接 ???? 介紹 ?? 用PyCharm寫P…

數據庫的事務(Transaction)

在數據庫中&#xff0c;事務&#xff08;Transaction&#xff09; 是保證數據操作一致性和完整性的核心機制。它通過一組原子性的操作單元&#xff0c;確保所有操作要么全部成功&#xff08;提交&#xff09;&#xff0c;要么全部失敗&#xff08;回滾&#xff09;。以下是數據…