将数据链接到数据库中的多个实体
我正在设计一个数据库(在这里简化)来存放零件。每个部分都有其独特的PartID。我们可以将部件储存在不同的容器:将数据链接到数据库中的多个实体
- 环保袋
- 盒
- 托盘
重要的是,我们对每个容器的具体不同的信息:
-
包: ID,材质类型,卷,手柄类型
-
盒: ID,高度,宽度,长度
- 托盘: ID,dateCreated会,NumberOfTimesUsed,颜色
我的问题:什么是零件链接到的最好办法这些多个容器实体?
在我看来,最简单的方法是在Part表中创建ContainerType和ContainerID列。我很犹豫,因为你基本上违反了具有非强制外键的列到多个表的参照完整性,因为它是非法的。
我们可以用一个容器的所有可能属性制作一个大容器表,但这看起来也很麻烦。
任何帮助或指导将不胜感激!
这是一个在MySQL中没有很好答案的问题。有几种方法,每种方法都有优点和缺点。
选项#1 - 满桌子的空值
正如评论所说,一个containers
表中,将有所有列,其中不乏NULL,因为他们将不相关的3容器2类型。 在SELECT
和JOIN
中使用这样的表格非常容易,但在这种情况下,数据库无法帮助您验证数据。您可以轻松地插入长度不足的包或没有包的包,并且数据库无法执行。
选项#2 - 移动问题的连接表
在这种方法中,你是从储存容器,该储存部件位置的表的表移动的问题。
有3个独立的容器表:
- 袋
- 箱
- 托盘
而对于部分连接到容器的一个表:
- parts_to_containers
与列:
- PART_ID
- CONTAINER_TYPE
- CONTAINER_ID
此选项是更好,如果你独立,经常处理集装箱的库存。它与集装箱你的工作很轻松,并把与部件的集装箱安置工作问题的一部分。
您仍然可以写3个LEFT JOIN
s表示将让你对每个零件的集装箱信息的查询。
一件事
如果你希望有更多类型的容器,没有以上将是易于扩展。如果再加上越来越多的容器类型,你可能需要一个完全不同的方法,所有共同容器字段是一个主containers
表,和所有其他容器属性处于container_attributes
表container_id
,attribute_name
和attribute_value
。一属性将是容器类型,其他人将颜色,宽度,体积等
这是为与各种随时间变化的不同attrobutes的对象非常灵活的模型。
你不应该感谢的人的意见,但我还是要去这样做,因为这个答案是伟大的。谢谢。 – user1904766
表中一对多关系的经验法则是:关系单边的主键充当关系多方的外键,以保持参照完整性。
创建一个名为containers
的表,主键列为container
。 id
等栏目,如container
。 name
,container
。 createdOn
,container
。 lastOpenedOn
。主键container
。来自表container
的id
作为名为parts
的外键列添加到您的零件表中。 container_id
。
Yikes!也许我应该指定更好,但这是一对多的关系。许多零件可以放在一个容器中,而我只有一个零件表。 – user1904766
个人而言,我会创建一个'container'表中的列'ID,ContainerType,MaterialType,音量,HandleType,高度,宽度,长度,dateCreated会,NumberOfTimesUsed,'和'Color'。你必须一吨NULL值的,但它将使加盟这么容易,你才能避免部分表重复了大量的数据。你只需加入一个身份证号码。 –