Sql 复杂逻辑约束

Sql 复杂逻辑约束,sql,constraints,Sql,Constraints,我试图在具有以下特征的模式上强制执行数据正确性: 表: |SAVE_TYPE|PROFILE|USERNAME|DATA| 根据保存类型,将使用配置文件列或用户名列。想象一下,如果一个用户希望在概要文件范围内保存数据,那么我将插入以下行: |SAVE_TYPE|PROFILE|USERNAME|DATA| |PROFILE |PROF. 1|Mr. X |123 | 这一行将意味着数据将可用于PROF.1,并由用户X先生插入。另一方面,在这种情况下: |SAVE_TYPE|PROFIL

我试图在具有以下特征的模式上强制执行数据正确性:

表:

|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_类型、PROFILE和USERNAME列约束,但现在这是完全正确的。我的模型接受的错误数据:

同一用户的“保存类型->用户”上的多个实例

|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|USERNAME|DATA|
|PROFILE  |PROF. 1|Mr. X   |123 |
|PROFILE  |PROF. 1|Mr. Y   |123 |
|PROFILE  |PROF. 1|Mr. Z   |123 |
提前感谢,希望我已经说清楚了:)

“这一行意味着该数据将可用于PROF.1的配置文件,并由用户X先生插入。”

“此行意味着数据将仅对X先生可用。”

如果您的“行的含义”如此不同,那么这表明您手头的应该是两个不同的表


在关系理论方面:每个relvar(“表”)都有一个关联的外部谓词(“表中的行的实际含义”)。因此,如果有两个不同的谓词,那么还应该有两个不同的relvars。

我想这毕竟是一个简单的问题:)。谢谢你打开我的心扉!