
我正在嘗試建立一個新的存取資料庫,將植物與其所含的化學物質相關聯。我知道這是多對多的關係,因為許多植物可以含有相同的化學物質,而且同一植物顯然可以含有多種化學物質。我嘗試建立一個連接表,並以這種方式創建多對多關係,但我仍然不清楚,因為我正在建立資料庫並輸入數據,如何告訴訪問哪些化學品位於哪些植物中?任何幫助將不勝感激,因為我需要快速開始這個計畫。
答案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) 。表的外鍵應該要級聯刪除,這樣就可以輕鬆刪除植物。表的外鍵應該Plant
Chemical
Plant
Chemical
不是級聯刪除,因為您不應該能夠刪除植物中含有的化學物質。
最好對植物和化學名稱建立唯一的索引,以加快搜尋速度並避免重複條目。
在 Access 中Plant.PlantID
,Chemical.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