2012-03-09 54 views
3

我有許多一對多關係通過表「farmer2crop」鏈接,鏈接農民作物種類(例如水稻,小麥,玉米,調味品等)多對多關係? (子類查找)

例如

FARMER2CROP 
f2c_id 
farmer_id 
crop_id 

然而,一些農作物需要進一步的子類別查詢,例如,香料(小茴香,辣椒等)

部分我認爲所有的香料子類型應該是莊稼表的一部分,也許應該有一個父類別,但客戶希望香料是次要的查找,大多數作物沒有父類型。

所以我可以有一個第三級多到多表連接到farmers2crops:

FARMERS2CROPS2SPICES 
f2c_id 
spice_id 

但是,這似乎有點令人費解,是否有更好的設計在這裏的任何建議 - 或者這是最好的交易關閉?

在此先感謝。

+1

這不是一個折衷,這是[正常化](http://en.wikipedia.org/wiki/Database_normalization)。 – 2012-03-09 11:17:34

+0

我同意 - 我只是想知道這是最好的方法,還是我應該更實用。 – 2012-03-09 11:39:25

+0

我會考慮非規範化數據的唯一原因是,如果存在性能問題(請考慮數據倉庫)。您可以創建VIEWS ad-infinitum以最喜歡的表格形式呈現數據,但我不會爲此更改底層結構。 – 2012-03-09 12:29:09

回答

1

按道理你應該有以下表格:

FARMER(farmer_id,...)

CROP(crop_id,farmer_id,...)

CROPSUB(cropsub_id,crop_id ... )

通過這三個表,您可以通過連接進行連接(三點意味着其他可能的表字段)。

我希望這對你有幫助。

+0

這裏的問題是農民可能有很多農作物,因此是農民的農作物。 – 2012-03-09 11:37:02

+0

我不知道我是否正確,但你可以再看看。我試圖編輯這些表格,以便它們能夠遵守我認爲是您的問題的內容。 – 2012-03-09 12:44:37

1

我會忘記farmers2crops2spices選項,對於需要IMO太複雜。

簡單選項:添加subcategory表+ crop.subcategory_id列(無效)。 但是,您最終可能會得到subsubcategory,subsubsubcategory等表格(+ crop.subsubcategory_id等)。

但我想你長期需要的是你的作物類別的nested set。我建議使用像Propel這樣的ORM(如果你使用PHP),它將抽象所有的難題來有效地使用這樣的結構。

+0

問題是,除了香料(例如水果)之外,可能還有幾種作物被分類,所以我農民的桌子上的可空的sub_cat_id不會很理想。感謝嵌套集列表,我需要閱讀。 – 2012-03-09 11:42:45

+0

請注意,在我的回答中,我沒有建議將'sub_cat_id'字段添加到'farmers2crop'表中,而是添加到'crop'表(我將該字段命名爲'crop.subcategory_id')。 – 2012-03-09 13:10:51