2009-07-03 52 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

我認爲你必須要做到這一點的代碼,但我會告誡觸發器 - 正如你所指出的觸發器的費用會根據您的結構多麼複雜比的線性關係差了很多。

在具有收集代碼是解決一個非常簡單的問題。

真的是你的表定義無法定義這種情況下出來,這是一個規則,那就是數據本身的屬性,而不是存儲結構。

對於數據結構,我想出了相同的結構。