如何在 Microsoft Access 處理多對多關係?

如何在 Microsoft Access 處理多對多關係?

我正在嘗試建立一個新的存取資料庫,將植物與其所含的化學物質相關聯。我知道這是多對多的關係,因為許多植物可以含有相同的化學物質,而且同一植物顯然可以含有多種化學物質。我嘗試建立一個連接表,並以這種方式創建多對多關係,但我仍然不清楚,因為我正在建立資料庫並輸入數據,如何告訴訪問哪些化學品位於哪些植物中?任何幫助將不勝感激,因為我需要快速開始這個計畫。

答案1

每個植物/化學品組合僅存在一次的 m 對 n 關係的資料庫架構如下所示:

Table Plant                                                     Table Chemical
+-----------+                                                   +--------------+
|PK PlantID | <----+                                      +---> |PK ChemiclaID |
+-----------+      |     Table PlantChemical              |     +--------------+
|   Name    |      |     +---------------------------+    |     |   Name       |
|           |      +----o|PK FK PlantID              |    |     |              |
|           |            |PK FK ChemicalID           |o---+     |              |
+-----------+            +---------------------------+          +--------------+
                         |      Percentage (optional)|
                         |                           |
                         |                           |
                         +---------------------------+

即,在連接表中,主鍵 (PK) 由PlantID和組成ChemicalID,因為您只想將每種化學物質分配給給定工廠一次。一個工廠仍然可以擁有許多化學品,並且一種化學品仍然可以分配給許多工廠。

聯結表具有該表和該表的PlantChemical外鍵 (FK) 。表的外鍵應該要級聯刪除,這樣就可以輕鬆刪除植物。表的外鍵應該PlantChemicalPlantChemical不是級聯刪除,因為您不應該能夠刪除植物中含有的化學物質。

最好對植物和化學名稱建立唯一的索引,以加快搜尋速度並避免重複條目。

在 Access 中Plant.PlantIDChemical.ChemicalID應該是AutoNumber列。

PlantChemical.PlantID並且PlantChemical.ChemicalID應該是Numeric Long列。


在 UI 中,讓使用者從Plant表格中選擇一種植物,並從表格中選擇多種化學物質Chemical。對於每種化學品,使用給定的PlantID和向連接表中插入一筆記錄ChemicalID

然後,用戶將選擇另一個植物並在那裡執行相同的操作。

答案2

假設表 Plant 具有主鍵 PlantId,表 Chemical 具有主鍵 ChemicalId。

表 PlantChemical 將有兩列:PlantId 和 ChemicalId。這些列中的每一列都應該有一個索引- 不是唯一索引,因為目的是每個工廠和每個化學品的多個條目,並且您希望從工廠轉到化學品(如下例查詢,需要PlantId 上的索引)並且也從 Chemical 到 Plant(因此需要 ChemicalId 上的索引)。因此,您可能希望放入一個自動增量列作為主鍵(我願意)。

然後你可以將兩者聯繫起來

select *
from Plant p
inner join PlantChemical pc on pc.PlantId = p.PlantId
inner join Chemical c om c.ChemicalId = pc.ChemicalId

(這對 Access 來說可能是不正確的語法。我記得 Access 對連接的 on 部分中的列名稱的順序有意見,但沒有…現在就訪問。0

相關內容