我正在尝试在具有以下特征的模式上强制执行数据正确性:
表:
|SAVE_TYPE|PROFILE|USERNAME|DATA|
根据保存类型,将使用配置文件列或用户名列。想象一下,如果想要在配置文件范围内保存数据,那么我将插入以下行:
|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上的多个实例 - >同一用户的USER。
|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上的多个实例 - >相同配置文件的配置文件。
|SAVE_TYPE|PROFILE|USERNAME|DATA|
|PROFILE |PROF. 1|Mr. X |123 |
|PROFILE |PROF. 1|Mr. Y |123 |
|PROFILE |PROF. 1|Mr. Z |123 |
先谢谢,希望我已经说清楚了:)
答案 0 :(得分:2)
“此行表示数据将可用于配置文件PROF.1,并由用户X先生插入。”
和
“此行表示数据仅适用于X先生。”
如果你的“行的意义”是如此不同,那么这表明你手边的东西应该是两个不同的表格。
就关系理论而言:每个relvar(“table”)都有一个相关的外部谓词(“表中的行实际意味着什么”)。因此,如果您有两个不同的谓词,那么您还应该有两个不同的relvars。