如何在循环引用中定义表关系?

时间:2009-07-06 10:24:09

标签: sql foreign-keys

在我目前的项目中,我有关于颜色的数据。 每种颜色都是真彩色(带有RGB值)或者是多层颜色中存在的“容器颜色” 这可能会创建循环引用,必须在应用程序级别捕获(但another question

所以我有

Colors
------
+ (PK) Id

ColorComposition
-----------
+ (PK) Id
+ (FK) MotherColorId
+ (FK) ChildColorId

当我将它们添加到我的Linq2Sql架构中时,我得到了奇怪的关系。这让我怀疑我的结构。

颜色应该有0到多个ColorCompositions(Color.Id => ColorComposition.MotherColorId)
ColorComposition应该有多种颜色(ColorComposition.ChildColorId => Color.Id)

正确解释第一个关系,但第二个关系不正确。这是错误的方向。
我应该如何根据外键定义最后一个关系?

2 个答案:

答案 0 :(得分:3)

听起来你正试图存储非循环有向图。尝试google搜索'sql非循环有向图'。这是最好的结果:

A Model to Represent Directed Acyclic Graphs (DAG) on SQL Databases

您的'MultiColor'表格名称令人困惑。考虑将其更改为“ColorComposition”?

答案 1 :(得分:0)

添加另一个列名称,如状态,并将母亲和孩子放在此列中。 在您的关联工作正常后,根据ID在Multicolor表中仅使用一个fkColourid更新此状态列中的状态。