資料庫範式與實例

来源:https://www.cnblogs.com/dichuan/archive/2018/03/19/8605447.html
-Advertisement-
Play Games

設計關係資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的範式,各種範式呈遞次規範,越高的範式資料庫冗餘越小。 目前關係資料庫有六種範式:第一範式(1NF)、第二範式(2NF)、第三範式(3NF)、巴斯-科德範式(BCNF)、第四範式(4NF)和第五範式(5NF, ...


設計關係資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的範式,各種範式呈遞次規範,越高的範式資料庫冗餘越小。

目前關係資料庫有六種範式:第一範式(1NF)、第二範式(2NF)、第三範式(3NF)、巴斯-科德範式(BCNF)、第四範式(4NF)和第五範式(5NF,還又稱完美範式)。

在實際中,前面的三種,已能滿足一般的資料庫設計要求。

第一範式(1NF)

所謂第一範式(1NF)是指在關係模型中,對域添加的一個規範要求,所有的域都應該是原子性的,即資料庫表的每一列都是不可分割的原子數據項,而不能是集合,數組,記錄等非原子數據項。即實體中的某個屬性有多個值時,必須拆分為不同的屬性。在符合第一範式(1NF)表中的每個域值只能是實體的一個屬性或一個屬性的一部分。簡而言之,第一範式就是無重覆的域。

簡記:1NF 欄位不可分。

不符合1NF的例子:

 

 

學號

姓名

年齡

出生年月

父母親

課程

學分

成績

等級

001

張三

20

1996-02

父:張無忌,

母:韓梅梅

數學

5

80

觀察上表會很容易發現欄位父母親身可分為父親和母親的,設計如下:

符合1NF的例子:

 

學號

姓名

年齡

出生年月

父親

母親

課程

學分

成績

等級

001

張三

20

1996-02

張無忌

韓梅梅

數學

5

80

第二範式(2NF)

第二範式(2NF)要求實體的屬性完全依賴於主關鍵字。所謂完全依賴是指不能存在僅依賴主關鍵字一部分的屬性,如果存在,那麼這個屬性和主關鍵字的這一部分應該分離出來形成一個新的實體,新實體與原實體之間是一對多的關係。為實現區分通常需要為表加上一個列,以存儲各個實例的唯一標識。簡而言之,第二範式就是在第一範式的基礎上屬性完全依賴於主鍵。

簡記:2NF有主鍵,非主鍵欄位依賴主鍵。

不符合2NF的例子:

學號

姓名

年齡

出生年月

父親

母親

課程

學分

成績

等級

001

張三

20

1996-02

張無忌

韓梅梅

數學

5

80

001

張三

20

1996-02

張無忌

韓梅梅

語文

5

90

符合2NF的例子:

 

學號

姓名

年齡

出生年月

父親

母親

001

張三

20

1996-02

張無忌

韓梅梅

 

編號

課程

學分

2001

數學

5

2002

語文

5

 

編號

學號

課程

成績

等級

1001

001

2001

80

1002

001

2002

90

第三範式(3NF)

在1NF基礎上,任何非主屬性不依賴於其它非主屬性[在2NF基礎上消除傳遞依賴]。第三範式(3NF)是第二範式(2NF)的一個子集,即滿足第三範式(3NF)必須滿足第二範式(2NF)。它要求一個關係中不包含已在其它關係包含的非主關鍵字信息。

簡記:3NF非主鍵欄位不能相互依賴。

不符合3NF的例子:

學號

姓名

年齡

出生年月

父親

母親

001

張三

20

1996-02

張無忌

韓梅梅

 

編號

學號

課程

成績

等級

1001

001

2001

80

1002

001

2002

90

符合3NF的例子:

 

學號

姓名

出生年月

父親

母親

001

張三

1996-02

張無忌

韓梅梅

 

編號

學號

課程

成績

1001

001

2001

80

1002

001

2002

90

 

編號

級別

分數線

3001

90

3002

80


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.1 jumpserver安裝 同步時間:ntpdate ntp1.aliyun.com 關閉selinux 關閉防火牆 系統字體修改成英文 1.1.1 安裝依賴(前提需要epel源) yum install -y git python-pip mariadb-devel gcc automake ...
  • 本文由“汽車電子expert成長之路”公眾號中“S12(X)系列MCU的片上存儲器資源與分頁訪問機制詳解”文章整理得來 最近接觸S12MCU中關於FLASH的擦寫相關知識,需要捋清楚幾個概念。 (16位單片機) 具體記憶體分配看 MC9S12G系列晶元手冊中 40 頁 本地地址(Local Addre ...
  • 配置Apache提示報錯configure error: APR could not be located. Please use the --with-apr option. 解決辦法: ./configure --prefix=usr/local/apache/ --with-apr=/usr/ ...
  • 在mac版本AppStore下載軟體的時候,有時會出現“This item is temporarily unavailable, Try again later”錯誤提示,當然等一會兒或者不斷重新嘗試都是無法下載的。 "StackOverFlow" 上找到一個解法: Mac App Store S ...
  • linux系統概述,linux系統的發行版有哪些,linux的存儲設備,linux的目錄結構的簡單介紹 ...
  • 啟動Apache提示報錯:Could not reliably determine the server's fully qualified domain name, using localhost,localdomain . Set the 'ServerName' directive globa ...
  • 1.點擊右上角的按鈕 2.選擇要登錄的客戶名字 點擊進入 3.輸入賬號密碼 進入指定的賬號 ...
  • [20180319]直接路徑讀特例12c.txt--//昨天的測試突然想起以前遇到的直接路徑讀特例,在12c重覆測試看看.1.環境:SCOTT@test01p> @ ver1PORT_STRING VERSION BANNER CON_ID IBMPC/WIN_NT64-9.1.0 12.1.0.1 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...