2017-08-14 70 views
0

我有幾個原材料,通過它們的零件號(唯一)存儲在一個表中(其他字段包括描述,單位,數量,購買日期等)。一個程序集(存儲在單獨的表中)需要幾種這些原材料才能構建它。這些原材料不是任何特定裝配的專有產品 - 可能有多種不同的裝配使用相同的原材料。MS訪問關係和鏈接數據

我曾想過創建一個單獨的表,其中有一個用於裝配的區域和一個用於原材料的區域 - 允許它們被鏈接。然而,這意味着對於一個具有例如三種原材料的組件,將會有三個記錄在重複組裝字段中創建(不理想,因爲它會導致非常大的數據庫)。

我對有限的關係的理解告訴我,如果沒有一個普通的主鍵,這些關聯是不可能的,即使有一個,我也不會看到如何將多個原材料鏈接到一個程序集。考慮到用戶隨着時間的推移,將新的原材料和新的組件添加到這兩個表中,這增加了複雜性,因爲我對MS Access的理解有限,我不確定可以實現。

也許有更好的方式來存儲數據,或者MS Access中的SQL可以實現這一點?但是,我比SQL更無知SQL。

任何幫助和建議,非常感謝。

+0

查看「從Microsoft Access開始」,「SQL入門」等類似的一些教程。有很多可以找到瀏覽。 – Gustav

回答

1

這是非常可能的,而且之前已經做過很多次了。

想象一下你的原料表看起來是這樣的:

+---+--------+ 
| 1 | Metal | 
+---+--------+ 
| 2 | Wood | 
+---+--------+ 
| 3 | Rubber | 
+---+--------+ 

而且你的組件是這個樣子:

+---+-------+ 
| 1 | Bike | 
+---+-------+ 
| 2 | Table | 
+---+-------+ 

然後,要創建一個多一對多的關係,你需要第三張表(第AssemblyIDMaterialID列):

+---+---+ 
| 1 | 1 | 
+---+---+ 
| 1 | 3 | 
+---+---+ 
| 2 | 2 | 
+---+---+ 

如您所見,自行車需要橡膠和金屬,桌子只需要木材。

在Access中有許多關於多對多關係的更多詳細指南。但核心概念是你需要一個額外的表來將兩者聯繫在一起。

+0

是否可以鏈接,而不必爲裝配中所需的每種原材料創建新記錄?對於多個複雜裝配(有些具有20多種原材料),這意味着只有一個裝配需要20多個記錄,因此非常快速地生成一個非常大的數據庫。這很可能會存在索引/速度問題? –

+0

這是可能的,但不建議。每個原材料的記錄確實非常小(只有2個數字,如果您想添加主鍵,則爲3個,但您可以使用兩個列的唯一複合索引,而不需要另一個標識符)。這意味着尺寸和索引真的不是問題。如問題所述,這也是一種非常常見的技術,因此數據庫針對此進行了優化。 –