如何设计一个有很多2个关系的数据库

时间:2011-09-22 14:40:23

标签: core-data relational-database

我设计数据库已经有很长一段时间了,只是想确保我正在设计它。

我有一个有名称和描述的实体。

此实体可以有许多实体类型的子实体。

所以它就像一个递归的关系。现在确定如何正确设计数据库。

我是创建第二张桌子还是什么?

更新:一个实体只能拥有一个父实体或没有父实体。

4 个答案:

答案 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_linksparent_entity_id列的新表child_entity_id。您可以通过在此表中插入和删除行来管理关系。