2009-07-03 95 views
0

我有关于颜色的数据。有些颜色由多种颜色组合而成。 其中一种组合理论上可以是另一种组合颜色。 在组合颜色的情况下,我需要定义一些关于“孩子”颜色的属性。这个循环数据引用可以设计得更好吗?

我现在有我的数据库定义,像这样:

COLOR 
!Id 
+MultiColorGroupId 

MULTICOLOR 
    !Id 
    +MultiColorGroupId 
    +ColorId 
    +Type 

这可以包含我需要在一个相当明确的方式的所有信息。 我想可能会发生的唯一的事情是,我得到一个循环引用,其中颜色本身就是childColor。 目前唯一可以解决的方法是在数据库或应用程序中插入检查。由于循环引用可能是任意深度的,并且当前结构可能会相当宽泛,所以我更喜欢更确定的数据结构。

有没有更好的方法来定义这个?

+0

明显的答案 - 在数据库中建立检查。也许扩大这个问题来解释为什么这不是一个选项? – 2009-07-03 14:18:23

+0

K.编辑OP澄清 – 2009-07-03 15:00:13

回答

1

如果深度可以是任意的,那么你不能解决数据结构的问题。有一点需要考虑的是,如果自我引用实际上存储在数据库中,那么这是一个问题。也许应该由检索代码来确保它不会无限读取数据。

我有一个食物食谱类似的问题。需要酸奶来制作酸奶(选择一个常见的例子),所以我们必须支持储存,并在检索时加入逻辑以确保给定的配料只爆炸一次。

0

如果你有一个接口(比SQL等),这些表格,你可以轻松地排除可用选项的所有“非法”的选项。否则可以使用on-insert和on-update触发器或检查约束。

0

我认为你必须要做到这一点的代码,但我会告诫触发器 - 正如你所指出的触发器的费用会根据您的结构多么复杂比的线性关系差了很多。

在具有收集代码是解决一个非常简单的问题。

真的是你的表定义无法定义这种情况下出来,这是一个规则,那就是数据本身的属性,而不是存储结构。

对于数据结构,我想出了相同的结构。