數據庫術語“關係”或“關係”描述表格中數據的連接方式。
數據庫領域的新手往往很難看到數據庫和電子表格之間的差異。 他們看到數據表並認識到數據庫允許您以新的方式組織和查詢數據 ,但未能掌握數據之間關係的重要性,這些關係為關係數據庫技術提供了名稱。
通過關係可以用強大的方式描述不同數據庫表之間的關係。 這些關係可以用來執行強大的跨表查詢,即連接。
數據庫關係的類型
有三種不同類型的數據庫關係,每種關係都根據關係中可能涉及的表行數進行命名。 這三種關係類型中的每一種都存在於兩個表之間。
- 當第一個表中的每個條目在第二個表中只有一個對應項時,會發生一對一關係 。 一對一關係很少使用,因為將所有信息簡單地放在一張表中通常會更高效。 一些數據庫設計者通過創建包含另一個表中數據子集的表來充分利用這種關係。
- 一對多關係是最常見的數據庫關係類型。 它們發生在表A中的每條記錄對應表B中的一條或多條記錄時,但表B中的每條記錄僅對應於表A中的一條記錄。例如,小學教師表和學生表之間的關係數據庫可能是一對多的關係,因為每個學生只有一位老師,但每位老師都有多個學生。 這種一對多的設計有助於消除重複的數據。
- 當表A中的每條記錄對應表B中的一條或多條記錄時,會出現多對多關係 ,表B中的每條記錄對應表A中的一條或多條記錄。例如,教師與課程表格可能是多對多的,因為每個教師可以指導多於一門課程,每門課程可能有一個以上的教師。
自我參照關係:特例
當只涉及一個表時,自引用關係就會發生。 一個常見的例子是僱員表,其中包含有關每位員工的主管的信息。 每位主管也是一名僱員,並有自己的主管。 在這種情況下,存在一對多的自引用關係,因為每個員工都有一個主管,但每個主管可能有多個員工。
使用外鍵創建關係
通過指定一個外鍵,可以在表之間創建關係。該鍵告訴關係數據庫這些表是如何關聯的。 在許多情況下,表A中的列包含從表B引用的主鍵。
再次考慮教師和學生表格的例子。 Teachers表格只包含一個ID,一個名稱和一個課程列:
InstructorID | 老師的名字 | 課程 |
---|---|---|
001 | John Doe | 英語 |
002 | 簡Schmoe | 數學 |
Students表包含一個ID,名稱和一個外鍵列:
學生卡 | 學生姓名 | Teacher_FK |
---|---|---|
0200 | 洛厄爾史密斯 | 001 |
0201 | Brian Short | 001 |
0202 | 科基·門德斯 | 002 |
0203 | 莫妮卡瓊斯 | 001 |
Students表中的Teacher_FK列引用了Teachers表中教師的主鍵值 。
通常,數據庫設計人員將在列名稱中使用“PK”或“FK”來輕鬆識別主鍵或外鍵列。
請注意,這兩個表格說明了教師和學生之間的一對多關係。
關係和參照完整性
一旦將一個外鍵添加到表中,您就可以創建一個數據庫約束來強制兩個表之間的參照完整性 。 這確保了表格之間的關係保持一致。 當一個表具有指向另一個表的外鍵時,參照完整性的概念指出,表B中的任何外鍵值都必須引用表A中的現有記錄。
實現關係
根據您的數據庫,您可以通過不同的方式實現表格之間的關係。 Microsoft Access提供了一個嚮導,可輕鬆讓您鏈接表格並強制執行參照完整性。
如果您直接編寫SQL,則應首先創建表Teacher,並將ID列聲明為主鍵:
CREATE TABLE教師(
InstructorID INT AUTO_INCREMENT PRIMARY KEY,
Teacher_Name VARCHAR(100),
課程VARCHAR(100)
);
在創建Students表時,您將Teacher_FK列聲明為引用Teachers'表中InstructorID列的外鍵:
CREATE TABLE學生(
StudentID INT AUTO_INCREMENT PRIMARY KEY,
Student_Name VARCHAR(100),Teacher_FK INT,
FOREIGN KEY(Teacher_FK)參考教師(InstructorID))
);
使用關係來加入表格
一旦在數據庫中創建了一個或多個關係,就可以通過使用SQL JOIN查詢來合併來自多個表的信息,從而充分發揮其功能。 最常見的連接類型是SQL INNER JOIN或簡單連接。 這種類型的聯接從多個表中返回滿足聯接條件的所有記錄。 例如,此JOIN條件將返回Student表名中的外鍵與Teachers表中的主鍵相匹配的Student_Name,Teacher_Name和Course:
SELECT Students.Student_Name,Teachers.Teacher_Name,Teachers.Course
從學生
INNER JOIN教師
ON Students.Teacher_FK = Teachers.InstructorID;
這個語句產生一個如下所示的表格:
從SQL連接語句返回表
Student_NameTeacher_NameCourseLowell SmithJohn DoeEnglishBrian ShortJohn DoeEnglishCorky MendezJane SchmoeMathMonica JonesJohn DoeEnglish