我设计数据库已经有很长一段时间了,只是想确保我正在设计它。
我有一个有名称和描述的实体。
此实体可以有许多实体类型的子实体。
所以它就像一个递归的关系。现在确定如何正确设计数据库。
我是创建第二张桌子还是什么?
更新:一个实体只能拥有一个父实体或没有父实体。
答案 0 :(得分:0)
在关系数据库中,您使用的是join table,故事结尾。
entity
======
id
name
description
xref_entity_subentities
=======================
parent_entity_id (FK references entity)
child_entity_id (FK references entity)
我无法与核心数据对话。
答案 1 :(得分:0)
对于多对多关系,您需要一个交集表来委派自身之间的关系
例如,
Entities OtherEntities
-------- -------------
ID ----> EntityID1
Name <---- EntityID2
Descrip
答案 2 :(得分:0)
对于关系数据库: 您的实体不应该有一个子实体,它是另一个实体(或数据库不是正常形式)它可以包含一个关系(根据您的需要,一对一,一对多,多对多)很多)到同一个表/实体。
答案 3 :(得分:0)
编辑:根据问题的更新,我建议的解决方案以粗体显示,如下所示:
首先,让我们清楚这是否真的是一个多对多的情况,因为从你的描述中不清楚这是否真实。
您描述了一个树结构,其中一个实体可以拥有“嵌套”实体,并且可能这些嵌套实体每个都有自己的嵌套实体。但这只是一个多对多的问题,如果一个实体可以同时属于多个父母。
在任何一种情况下,您都会将所有实体存储在一个表中。 如果您想要表示没有多父系的嵌套实体的“简单”树,那么您可以在parent_entity_id
表中添加entities
列,该列指向entity_id
家长。顶级实体在此列中将具有标志值(例如,-1)或NULL
。在这种情况下,您只需要一个列,而不需要新表来表示关系。
如果它实际上是多父母的多对多关系,那么您将创建一个包含entity_links
和parent_entity_id
列的新表child_entity_id
。您可以通过在此表中插入和删除行来管理关系。