gpt4 book ai didi

sql - Oracle SQL,寻找关于约束的想法

转载 作者:行者123 更新时间:2023-12-01 08:17:20 25 4
gpt4 key购买 nike

我有一个包含类(class)、教师和领导者行的表格,

Class 和 Teacher 是数字,Leader 是 bool 值(实际上只是一个 Char(1))

该表表示教师和类(class)之间的关系。

一个类(class)可以有很多老师,或者一个老师有很多类(class)。

我需要进行约束或检查,以便对于每个不同的类,它出现的行中只有一行必须将 Leader 设为 true。

例如。

老师 |类(class) |领导者
1 | 1 |真的
2 | 1 |错误的
2 | 2 |真的

将被接受,因为每个不同的类都有一行出现,其 Leader 值为 true,但不超过一行。

如果有人可以提供有关如何将其表示为约束的想法,我们将不胜感激。

最佳答案

创建一个基于函数的索引很容易,该索引强制执行约束的“不超过一个领导者”部分

CREATE UNIQUE INDEX one_leader_per_class
ON your_table_name( (CASE WHEN leader = 'Y'
THEN class
ELSE null
END) );

不幸的是,创建一个声明性约束来强制要求每个类都有一个领导者并不是那么容易。我所知道的唯一声明性方法是创建一个按类聚合数据的物化 View ,将该物化 View 设置为 REFRESH FAST并在实体化 View 上创建约束,以确保 NUM_LEADERS实体化 View 中的列始终为 1。这需要您创建适当的实体化 View 日志,这会增加表上 DML 的开销。这也意味着在您提交之前不会违反约束,如果您的应用程序没有被编写为假设提交可能会失败,那么这可能会出现问题。

关于sql - Oracle SQL,寻找关于约束的想法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7789398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com