1

我設計一個數據庫,在那裏我需要以下實體:數據庫設計採用多很多一對多的關係

 
Manufacturers: e.g. CocaCola 
Brands: e.g. Diet Coke, Coke Zero 
Continents: e.g. North America, Europe 
Territories: e.g. United States, Canada 
Regions: e.g. Alaska, California, Quebec 
Suppliers 

供應商不在一個範圍內,且只有一個區域,該區域屬於領地,屬於一個大陸。

A品牌屬於製造商。

供應商,地區,領土和大洲屬於至少1個,但可能更多的品牌。

我無法想象如何組織表格之間的關係,以便供應商可以按品牌或製造商分組,而不會導致在供應商擁有多個品牌時在單個製造商下的總計算中包含重複項。當我嘗試考慮將區域添加到該等式中時,我更加困惑,更不用說Territory或Continent。

任何與此有關的幫助將不勝感激。

+0

在我的理解你沒有多對多的關係。我看到層次結構,也就是一對多的關係。 – Flinsch 2010-11-02 12:57:47

+0

對不起,我認爲這是我解釋的錯。正如我所看到的,如果一個地區屬於2個品牌,那麼這裏存在多對多的關係,否則我需要在Regions表內複製該地區?我認爲同樣適用於供應商,地區和大陸。感謝您的幫助。 :-) – MartynJones87 2010-11-02 12:59:09

+0

不,這是不正確的。如果區域屬於兩個品牌,則Brands表中的兩行將具有相同的region_id。 – 2010-11-02 13:07:08

回答

1

製造商 - >品牌 - >大陸 - >領土 - >地區 - >供應商 對不對?

因此以下外鍵:

Brand contains ManufacturerId 
Continent contains BrandId 
Territory contains ContinentId 
Region contains TerritoryId 
Supplier contains RegionId 

舉例來說,如果許多大陸具有相同的品牌,需要一個關係表:

Brand (id, more fields) 
BrandToContinent (BrandId, ContinentId) = many to many 
Continent (id, more info) 

或者,也許你需要連接一個品牌,或一個供應商,對許多地區或大陸而言,根據需要隨意添加更多的外鍵參考!

+0

這就是我的想法,但這導致我認爲我需要品牌與大陸,地區,地區和供應商之間的鏈接表,這對我來說似乎是錯誤的。 – MartynJones87 2010-11-02 13:07:33

1

沒有什麼錯。兩個實體之間可以有多個關係。只需根據需要定義許多外鍵和鏈接表。

而且,正如Flinsch指出的那樣,在你的情況下更簡單:你實際上只有一對多的關係,因此你不需要任何鏈接表。

更新。要識別不同的關係,請考慮「屬於」一詞的商業含義。品牌可以屬於該地區,如「該品牌屬於加州製造商」,以及「該品牌用於在阿拉斯加銷售商品」。 這是兩種不同的一對多關係,不是一對多關係。

更新2。多對多的有效示例是「用戶可以讀取多個文件,並且每個文件可以有多個具有」讀取「訪問級別的用戶。

HTH

+0

就是這樣一個品牌可以擁有多個地區,而且一個地區可以屬於多個品牌,多對多的關係呢? – MartynJones87 2010-11-02 13:06:14

+0

@Martyn,看到我的更新 – 2010-11-02 13:14:05

0

多對多的關係不存在,通常被無法理解數據庫結構應該怎麼是這個結果。

從你告訴我,聽起來好像關係是:

One continent -> Many Regions 
One region -> Many territories 
One territory -> Many suppliers 
One manufacturer -> One brand 
One brand -> Many suppliers 
One brand -> Many regions 
One brand -> Many territories 
One brand -> Many continents 

正如你所看到的,所有的關係都是一對多或一對一。試圖在表格之間「跳躍」會導致看似「多對多」的關係,但無法正確表示。我只列出了我從你寫的內容中收集到的關係,但我相信你能想到其他人。請記住,對於任何給定的表格,只要您願意,您可以擁有一對多或一對一的關係。你不可能有一個'多對多'的關係。

+0

我仍然認爲這裏有一個多對多的區域 - >多個品牌,並且與供應商,地區和大陸一樣。我可能是錯誤的,但... – MartynJones87 2010-11-02 13:04:18

+0

許多品牌和一個區域對許多供應商而言總是一個區域等等。例如,您無法找到供應商和區域之間的關係,因爲一個供應商可能有許多區域和一個區域可能有很多供應商。 – Neil 2010-11-02 13:07:54

+0

供應商和地區之間有一對一的關係,因爲供應商有1個地區,即它所在的地區。 – MartynJones87 2010-11-02 13:11:45