我正在设计一个数据库,我需要以下实体:
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 Brand属于制造商。
供应商,地区,地区和大陆属于至少1个但可能更多的品牌。
我无法想象如何组织表格之间的关系,以便供应商可以按品牌或制造商进行分组,而不会导致在供应商拥有多个品牌时,在单个制造商下将重复项包含在聚合计算中。当我试图考虑将区域添加到该等式中时,我更加困惑,更不用说Territory或Continent。
非常感谢任何帮助。
答案 0 :(得分:1)
这没什么不对。您可以在两个实体之间建立多个关系。只需根据需要定义尽可能多的外键和链接表。
而且,正如Flinsch指出的那样,在你的情况下,它甚至更简单:你实际上只有一对多的关系,因此你不需要任何链接表。
<强>更新即可。要确定不同的关系,请考虑“所属”一词的商业含义。品牌可以属于该地区,因为“这个品牌由加利福尼亚制造商拥有”,并且“该品牌用于在阿拉斯加销售商品”。 这是两种不同的一对多关系,而不是一对多关系。
更新2 。多对多的有效示例是“允许用户读取多个文件,并且每个文件可以具有多个具有'读取'访问级别的用户”。
HTH
答案 1 :(得分:1)
制造商 - &gt;品牌 - &gt;大陆 - &gt;地区 - &gt;地区 - &gt;供应商强> 正确?
因此以下外键:
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)
或者您可能需要将品牌或供应商连接到许多地区或大陆,而不是根据需要随意添加更多外键引用!
答案 2 :(得分: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
如您所见,所有关系都是一对多或一对一。试图在表之间“跳”会导致看似“多对多”的关系,但这种关系无法正确表达。我只列出了你从你写的东西中收集到的关系,但我相信你能想到别人。请记住,对于任何给定的表,您可以拥有尽可能多的一对多和一对一的关系。你不可能有一个“多对多”的关系。