Mysql 具有多对多约束的库存数据库设计?
我正试图为一个简单的清单程序设计一个数据库体系结构 该存货将由箱子中的物品组成。框包含项目,并且是项目本身 我想Mysql 具有多对多约束的库存数据库设计?,mysql,database,database-design,hierarchical-data,Mysql,Database,Database Design,Hierarchical Data,我正试图为一个简单的清单程序设计一个数据库体系结构 该存货将由箱子中的物品组成。框包含项目,并且是项目本身 我想box将是项的超级类型 我的主要问题是如何构造/约束框之间的关系,以便我仍然可以约束唯一的条件,即一个项目一次只能位于一个“位置” 我知道多对多关系应该让我知道哪些项目在哪些框中,但是其他框中的框又如何呢 例如: 方框A包含项目B和方框C框C包含项D 我如何设计一个系统,当我查找项D时,我会在框a和框C中找到它(如果我也能知道框之间的关系——后者在前者内部,那就太好了)。您可以使用表本
box
将是项的超级类型
我的主要问题是如何构造/约束框之间的关系,以便我仍然可以约束唯一的条件,即一个项目一次只能位于一个“位置”
我知道多对多关系应该让我知道哪些项目在哪些框中,但是其他框中的框又如何呢
例如:
方框A
包含项目B
和方框C
<代码>框C
包含项D
我如何设计一个系统,当我查找
项D
时,我会在框a
和框C
中找到它(如果我也能知道框之间的关系——后者在前者内部,那就太好了)。您可以使用表本身的自我关系。您可以在数据库设计中提及以下列:
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是主键,所以,数据库将只允许每个项有一行,因此,它将只在一个框中可用
检查此设计是否有帮助…您是否可以将方框作为项目进行设计?在这种情况下,您可以使用Item(PK、FKParent、Type),其中FKParent将约束到PK。您可以指定Box或Item的类型。您的语句“这样我仍然可以约束唯一的条件,即一个项目一次只能在一个“位置”似乎与示例相矛盾,我如何设计一个系统,当我查找项目D时,我会在框a和框C中找到它。请您提供更多详细信息。@codeLover对任何混淆表示歉意。当我写一个“地方”时,我的意思是一件物品不能放在多个盒子里,除非其中一个盒子在另一个盒子里。在我给出的示例中,
项D
位于框A
和框C
内,但这是允许的,因为框C
位于框A
内。这说明了吗?这似乎很有希望,但似乎允许递归位置。也就是说,BoxA
可以有ItemContainer=1
和BoxB
可以有ItemContainer=2
。您能重新表述您的担忧吗