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