關系模式(Relation Schema)是數據庫設計中最基本的理論基礎之一,其描述了數據在關系型數據庫中的結構和組織方式。一個關系模式需指出該關系的結構,包括構成屬性、屬性所屬的域、屬性和域之間的映射關系等。1970年,英國數學家愛德加·科德(E. F. Codd)在其經典論文中首次提出關系模型的概念,奠定了關系數據庫的理論基礎,在關系模型中,關系是用于描述數據的主要結構,關系模式則是對關系的簡潔表示。1972年,為支持基于關系模型的數據庫設計,E. F. Codd博士提出了規范化技術。在20世紀80年代,范式化設計作為一種評價和規范關系模式設計的方法,被廣泛應用于設計更加規范和高效的數據庫模式。同時,隨著數據庫應用場景的擴大和復雜化,為了平衡數據冗余和一致性的同時提高系統查詢效率和簡化數據模型,人們在設計數據庫時開始更多的關注反范式化設計的使用。而20世紀末到21世紀初,隨著大數據的興起和應用以及復雜數據結構的需求,對象關系模型(ORM)和NoSQL(Not Only SQL)數據庫的出現提供了更加靈活和可擴展的數據存儲方案,使得數據的存儲和操作更加靈活和方便。關系模式定義了數據庫中包括表名、列名、數據類型、主鍵、外鍵等關于表的結構的信息以及主鍵約束、唯一約束、外鍵約束、檢查約束等各種約束條件,為數據存儲提供了規范和結構化的基礎,減少了如文件系統等傳統的數據管理方法存在的數據冗余、一致性維護困難等問題。
發展演變
1970年,英國數學家E. F. Codd在論文《A Relational Model of Data for Large Shared Data Banks》中提出了關系模型的概念,包括關系、元組、屬性等,并首次將數據組織為一組二維表格(關系)的形式。關系模式則指出了該關系的結構,描述了數據在關系型數據庫中的結構和組織方式。因此,在關系數據庫中,一張表結構可稱為一個關系模式,表中的內容稱為一個關系,關系模型則是由若干個關系模式組成的集合。1972年,科德在《Further Normalization of the Data Base Relational Model》中提出了規范化技術。規范化通常作為對表結構的一系列測試來決定它是否滿足或符合給定范式。Codd的范式化設計作為一種評價和規范關系模式設計的方法,成為了數據庫設計的重要技術之一,包括第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。1974年,科德和美國科學家Raymond F. Boyce 在《Recent Investigations into Relational Data Base Systems》中對原來的3NF作了進一步的修正,提出了更為嚴格的定義,即Boyce-Codd范式(BCNF)。范式化技術通過分解不符合要求的關系模式,得到符合范式要求的更小的關系模式,以達到減少數據冗余、提高數據一致性和完整性的目的。1985年,科德在“計算機 Worold”雜志上提出的完全關系型的12條嚴格標準,即科德十二定律(Codd's12 rules),其確立了關系模式在數據庫系統中應該如何被處理和實現的標準。Codd's12 rules包括準則0、信息準則、保證訪問準則、空值的系統化處理、基于關系模型的動態的聯機數據字典、統一的數據子語言、視圖更新準則、高級的插入、修改和刪除操作、數據的物理獨立性、數據邏輯獨立性、數據完整的獨立性、分布獨立性和無破壞準則。這些規則被認為是關系數據庫的基本要求,奠定了關系數據庫理論的基礎,并對數據庫管理系統的發展產生了深遠影響。20世紀80年代末和90年代初,隨著關系數據庫系統的發展和應用的深入,人們意識到范式化設計在某些場景下可能導致性能下降問題,反范式化設計也在實際應用中的意識逐漸增強。反范式化設計,即有意放棄范式要求,以提高查詢效率、減少聯接的復雜性或簡化應用程序代碼等為目的。常見的反范式化技術包括冗余設計、使用非規范化表等,其具體操作為在一個表中增加另一個表的冗余字段,減少了兩個表查詢時的關聯,即減少連接運算,從而提高查詢效率。20世紀90年代末,對象/關系數據庫出現,其表示對某些初始的SQL產品向上兼容的擴展,如DB2和Informix。面向對象的方法和技術對計算機各個領域,包括程序設計語言、信息系統設計等方面都產生了深遠的影響,同時促進了數據庫中面向對象數據模型的研究和發展。許多關系數據庫廠商為了支持面向對象模型,對關系模型做了擴展從而產生了對象關系數據模型,其將數據庫中的關系模式映射為面向對象的模型,使數據的存儲和操作更加靈活和方便。20世紀末至21世紀初,NoSQL(Not Only SQL)數據庫的出現提供了更加靈活和可擴展的數據存儲方案。隨著互聯網應用的發展和大數據興起,傳統的關系數據庫模型在某些場景下顯得力不從心,無法應對很多PB級及以上數據庫處理任務。2009年在亞特蘭大舉行的“no:SQL(east)”討論會強調NoSQL是傳統關系型數據庫的有益補充,其放寬了關系模式對數據一致性和完整性的要求,以獲取更高的性能和可伸縮性。
基本語法
概述
在關系數據庫中,關系模式和關系實例共同組成一個關系,關系實例是一個表,關系模式則為對該表的描述。關系模式的定義包括模式名、屬性名、值.ch及模式的主關鍵字,其僅僅是對數據特性的描述,與物理存儲方式沒有關系。即關系模式是靜態的,只描述數據庫中數據的結構和組織方式。而關系實例是關系模式某一時刻的具體數據,是動態的。
關系模式的構成
在關系數據庫中,關系為值,關系模式為型。對關系的描述稱為關系模式,關系是元組的集合,其實質上是一張二維表,表的每行為一個元組,表的每列為一個域,對每列起一個名字稱為屬性。因此一個關系模式需指出該關系(即這個元組集合)的結構,包括構成屬性、屬性所屬的域、屬性和域之間的映射關系。
約束
在關系模式中,約束是用于確保數據的完整性和一致性的重要機制之一,可以單獨或組合使用。通過合理地使用約束條件,可以有效地管理和維護數據庫,并減少數據錯誤和不一致性的發生。
主鍵約束
主鍵約束用于唯一標識表中的每一行數據,確保每個實體都具有唯一的標識。主鍵可以由一個或多個列組成,組成主鍵的列稱為主鍵字段,主鍵字段的值不能為空(即不允許NULL值),且在整個表中必須唯一。
外鍵約束
外鍵約束用于定義表之間的關聯關系,確保引用完整性。外鍵是一個表中的列,其值必須對應另一個表中的主鍵或唯一鍵,常用于創建表之間的關聯,并確保關聯的數據一致性。
唯一約束
唯一約束確保指定列或列組合中的值是唯一的,用于確保某些列或組合列的取值不重復,但允許其中某些行的值為空(即允許NULL值)。
檢查約束
檢查約束用于限制列中的值必須滿足指定的條件,用于確保列中的數據滿足特定的規范或約束條件。
默認約束
默認約束用于為列指定默認值,當插入新行時如果未指定該列的值,則自動使用默認值,用于確保某些列始終具有預定義的默認值。
范式和反范式化
規范化是一種用來產生具有符合要求的屬性并能支持用戶或公司的需求的表的集合的技術,用于基于關系模型的數據庫設計,通過分解關系模式來消除其中不合適的數據依賴。
范式
范式是關系數據庫設計中的一種規范化技術,通過分解不符合要求的關系模式,得到符合范式要求的更小的關系模式,以達到減少數據冗余、提高數據一致性和完整性的目的。范式以函數依賴為基礎,包括第一范式、第二范式、第三范式和Boyce-Codd范式。在關系數據庫中,第一范式為最基本要求,不滿足第一范式條件的關系為非規范化關系。第二范式消除了非主屬性對碼的部分函數依賴,在一定程度上解決了數據冗余、插入異常和刪除異常的問題。第三范式消除了非主屬性對碼的傳遞函數依賴,避免了冗余度大等問題。BCNF通常被認為增強型的第三范式,消除了主屬性對碼的部分和傳遞函數依賴,滿足BCNF的關系模式在函數依賴范疇內實現了徹底的分離,即消除了插人異常和刪除異常。
反范式化
數據庫規范化的程度越高,數據冗余和操作異常越少,但同時分解得到的關系也隨之增加,導致進行查詢操作時通常涉及兩個或多個關系模式的屬性,即系統通常需要做過多的連接運算,降低了查詢速度。為了提高查詢效率,對于查詢經常用的的數據需要降低范式標準,適當保留冗余,反范式化由此產生。反范式化通過在表中增加冗余或重復的數據來提高數據庫的讀取性能,其具體操作為在一個表中增加另一個表的冗余字段,即通過減少連接運算來提高查詢效率。
關系模式的設計規則
避免數據冗余的設計原則
數據的冗余是指在數據庫中存儲了同一信息的多個副本,其可能引起冗余存儲、更新異常、插入異常和刪除異常等問題。一個好的關系模式應避免發生這些問題,即減少冗余。冗余存儲:信息被重復存儲。更新異常:當重復信息的一個副本被修改,所有的副本都必須進行同樣的修改,否則就會造成不一致性。插入異常:只有當一些信息事先已經存儲在數據庫中時,另外一些信息才能存入到數據庫中。刪除異常:在刪除某些信息時可能會丟失其他的信息。
關系模式應滿足的基本要求
元組的每個分量必須是不可分的數據項。數據庫中的數據冗余應盡可能的少。關系數據庫不因數據更新操作引起數據不一致問題。執行數據插入操作時,數據庫中的數據不會產生插入異常現象。執行數據刪除操作時,數據庫中的數據不會產生刪除異常現象。
關系模式示例
下面是一個學生信息表的關系模式示例:
其中,“Students”為表名,包含四個列:StudentID、Name、age和Major。StudentID列被定義為主鍵,Name列具有唯一約束,Age列有一個檢查約束限制年齡大于等于18歲。
關系代數與關系模式
關系實質上是一張二維表,關系模式為對該表的描述,關系代數操作則定義了如何對這些表進行操作。投影(Project):投影操作符用符號表示,投影操作的含義是從關系R中取出A指定的一列或多個列。即在給定的關系中按給定的屬性及順序組成一個新的關系。選擇(Select):選擇操作符用符號表示,選擇操作的返回的結果關系中的元組是從關系R中選擇出滿足條件F 的元組。即在給定的關系中選擇出滿足條件的元組組成一個新的關系。并(Union):并操作符用符號表示,并操作表示將R與S合并為一個關系,并且去掉重復元組。差(Difference):差操作符用符號表示,差操作表示在R中去掉S中存在的元組。勒內·笛卡爾積(Cartesian Product):笛卡爾積操作符使用符號表示,其運算的結果是兩個關系的元組的所有可能的連接。表示用R中的每個元組與S中每個元組相結合組成一個新的關系。新的關系度為R與S度之和,元組數為R與S元組數相乘積。連接:連接操作為從兩個關系的笛卡爾積中選取屬性滿足一定條件的元組,常用的為條件連接和自然連接兩種連接,條件連接用符號表示,自然連接則使用符號表示。
相關概念
關系數據庫
關系型數據庫是一種基于關系模型的數據庫管理系統,它將數據存儲在表中,表中的每一行都代表一個實體,而每一列代表實體的一個屬性。
關系模型
關系模型是由若干個關系模式組成的集合,由數據結構、數據操作和完整性約束構成。其中數據結構為模型中所操作的對象、類型的集合;數據操作為對模型對象所允許執行的操作方式;完整性規則指保證數據有效、正確和相容的特定的語義約束條件。
關系
關系是關系模型中用于描述數據的主要結構。在關系數據庫中,關系也是一張二維表,表的每行對應一個元組,每列對應一個域。
關系數據庫模式
關系數據庫的型也稱為關系數據庫模式,是對關系數據庫的描述,其包括若干域的定義以及在這些域上定義的若干關系模式。
參考資料 >
數據庫教父E.F.CODD .百度文庫.2024-11-01
2.1《數據庫系統概論》關系數據結構及形式化定義(關系、關系模式、關系數據庫).CSDN博客.2024-11-01
關系數據庫的由來.CSDN博客.2024-11-01