Oracle11g 向两列添加约束
我有一个数据库表,其中包含列Oracle11g 向两列添加约束,oracle11g,constraints,database-table,Oracle11g,Constraints,Database Table,我有一个数据库表,其中包含列“用户”、“角色”和“应用程序”。 我的要求是,一个用户只能有一个角色,但他可以属于多个应用程序。我希望以约束的形式添加此限制,但我无法实现它 在“用户”和“角色”上设置唯一约束将没有帮助。此外,在所有3列上设置唯一约束也没有帮助 有人能建议如何在这里设置约束吗 编辑1: 以下是预期结果: User Role Application U1 R1 A1 U1 R1 A2 U2 R2 A3 等等。。。我想限制的是,
“用户”、“角色”
和“应用程序”
。
我的要求是,一个用户只能有一个角色,但他可以属于多个应用程序。我希望以约束的形式添加此限制,但我无法实现它
在“用户”和“角色”上设置唯一约束将没有帮助。此外,在所有3列上设置唯一约束也没有帮助
有人能建议如何在这里设置约束吗
编辑1:
以下是预期结果:
User Role Application
U1 R1 A1
U1 R1 A2
U2 R2 A3
等等。。。我想限制的是,现在U1已经映射到R1,U1不应该映射到任何其他角色。然后您需要更改表设计,并进一步规范它。如果
用户
和角色
之间的关系是1对1
,则为用户角色映射创建一个查找表
,并为用户应用程序映射创建另一个表
理想情况下,您的两张桌子如下所示:
Create table user_role_map
(
user <datatype>,
role <datatype>
constraint user_pk primary key (user, role)
);
Create table user_application_map
(
user <datatype> NOT NULL,
applications <datatype> NOT NULL
);
创建表用户角色映射
(
用户,
角色
约束用户\u pk主键(用户、角色)
);
创建表用户\应用程序\映射
(
用户不为空,
应用程序不为空
);
我可能会问,一个用户可以关联多少个应用程序?目前不超过6个,但列表可以增加。是否允许您在表上创建触发器?还是快速刷新物化视图?同意,但该选项不可用。然后对用户和角色进行唯一约束。简单!这是行不通的,正如我所说,具有相同角色的用户可以属于多个应用程序,这意味着每个应用程序都必须重复用户角色行。您混淆了唯一组合和相同组合的重复。你能给出一些例子并展示你想要的结果吗?那么你的意思是改变模式是不可能的,答案的范围仅限于此表?