2011-10-19 132 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