ema*_*ard 23 mysql database-design
我想强制一个表中只有一条记录被视为可能访问该表的其他查询或视图的“默认”值。
基本上,我想保证这个查询总是只返回一行:
SELECT ID, Zip
FROM PostalCodes
WHERE isDefault=True
Run Code Online (Sandbox Code Playgroud)
我将如何在 SQL 中做到这一点?
Nic*_*mas 10
注意:这个答案是在提问者想要一些 MySQL 特定的东西之前给出的。这个答案偏向于 SQL Server。
将CHECK约束应用于调用UDF的表并确保其返回值 <= 1。UDF 可以只计算表 WHERE 中的行数isDefault = TRUE。这将确保表中不超过 1 个默认行。
您应该在列上添加位图或过滤索引isDefault(取决于您的平台)以确保此 UDF 运行得非常快。
注意事项
PostalCodes表执行大量更新,但是对于可能基于集合的活动的那些情况,这仍然是一个性能问题。考虑到所有这些警告,我建议使用gbn 建议的过滤唯一索引而不是检查约束。
编辑:在我们了解 MySQL 之前,这是面向 SQL Server 的
有4 5 种方法可以做到这一点:按照最想要到最不想要的顺序
我们不知道这是什么 RDBMS,但不是所有的都适用
最好的方法是过滤索引。这使用 DRI 来保持唯一性。
具有唯一性的计算列(参见 Jack Douglas 的回答)(由编辑 2 添加)
索引/物化视图,类似于使用 DRI 的过滤索引
触发(根据其他答案)
请注意,“一个默认值”的要求是在表上,而不是存储过程。存储过程将具有与带有 udf 的检查约束相同的并发问题
注意:问了很多次:
| 归档时间: |
|
| 查看次数: |
28410 次 |
| 最近记录: |