2011-10-19 62 views
0

我試圖在以下特徵中的一個模式執行數據正確性:複雜的邏輯約束

表:

|SAVE_TYPE|PROFILE|USERNAME|DATA| 

根據保存鍵入輪廓列或username列將被使用。試想一下,如果一個想在輪廓範圍內保存數據,那麼我會插入下面一行:

|SAVE_TYPE|PROFILE|USERNAME|DATA| 
|PROFILE |PROF. 1|Mr. X |123 | 

此行將意味着數據將可用於型材PROF。 1並插入到由用戶X先生在另一方面在這種情況下:

|SAVE_TYPE|PROFILE|USERNAME|DATA| 
|USER  |NULL |Mr. X |456 | 

該行表示該數據將僅適用於X先生

我不知道對此行爲實現約束的最好方法是什麼,可能是我應該使用另一個表結構(我打開以更改模式)。 現在我所擁有的是SAVE_TYPE,PROFILE和USERNAME列的唯一約束,但現在這完全正確。錯誤的數據,我的模型接受:

上SAVE_TYPE多個實例 - >用戶對同一個用戶。

|SAVE_TYPE|PROFILE|USERNAME|DATA| 
|USER  |PROF. 1|Mr. X |456 | 
|USER  |PROF. 2|Mr. X |456 | 
|USER  |PROF. 3|Mr. X |456 | 

對於同一個配置文件,SAVE_TYPE - > PROFILE上的多個實例。

|SAVE_TYPE|PROFILE|USERNAME|DATA| 
|PROFILE |PROF. 1|Mr. X |123 | 
|PROFILE |PROF. 1|Mr. Y |123 | 
|PROFILE |PROF. 1|Mr. Z |123 | 

在此先感謝,希望我所做的事情說清楚:)

回答

2

「這列將意味着數據將可用於型材PROF 1和被用戶X先生插入「。

「此行表示只有X先生纔有數據。」

如果你的「的含義爲行」是如此不同,那麼這是一個跡象表明,你手頭確實應該兩個不同的表。

就關係理論而言:每個relvar(「table」)都有一個關聯的外部謂詞(「表中的行實際上意味着什麼」)。因此,如果你有兩個不同的謂詞,你應該也有兩個不同的relvars。

+0

我想這畢竟是一個簡單的問題:)。感謝您打開我的心! – eliocs