具有多个多对多约束的库存数据库设计?

时间:2018-09-10 02:23:27

标签: mysql database database-design hierarchical-data

我正在尝试为简单的清单程序设计数据库体系结构。

此库存将由框中的项目组成。框包含项目,并且本身就是项目。

我想象box将是item的超类型。

我的主要难题是如何构造/约束盒子之间的关系,以便我仍然可以约束唯一的条件,即一件物品一次只能位于一个“位置”。

我知道多对多关系应该让我知道哪些项目在哪个盒子中,但是其他盒子中的盒子又如何呢?

例如:
Box A包含Item BBox CBox C包含Item D

如何设计一个系统,当我寻找Item D时会在{​​{1}}和Box A中找到它(如果我也能知道盒子之间的关系,那真是太好了- -后者在前者之内。

1 个答案:

答案 0 :(得分:0)

您可以将自身关系与表本身一起使用。您可以在数据库设计中提及以下提到的列:

ItemId(PK)
ItemName
ItemType(Can be B for Box and I for item)
ItemContainer(Will contain ItemId from this table itself and will be null if it is not present in any box, if required add check constraint that if itemType is I then it cannot be null)

您可以将数据放置为:

ItemId      ItemName      ItemType     ItemContainer
  1         BoxA             B            (null)
  2         BoxB             B               1
  3         ItemA            I               2

由于ItemId是主键,因此,数据库每个项目仅允许一行,因此,它仅在一个框中可用。

检查此设计是否有帮助...