一条依赖于 sql db 中所有其他表记录的记录

Posted

技术标签:

【中文标题】一条依赖于 sql db 中所有其他表记录的记录【英文标题】:A record that depends on all other table records in sql db 【发布时间】:2015-12-14 06:55:05 【问题描述】:

假设我有一个像这样的货币表:

表格 is_main 列包含有关将哪种货币视为“主要货币”的信息。表格必须包含一种主要货币,但不能超过一种。 是否有一种优雅的方法可以在 sql db 本身(在本例中为 H2)或 使用(java)应用层处理会更好吗?

Andy 提出的answer 用于:“当列y 不等于0 时应唯一的x 列”。 我会将需求定义为:“当所有其他 x 记录都等于 0 时,应该是唯一的列 x” 甚至更好:“当 col x 为 1 时,将所有其他 x 记录设置为 0” 我更喜欢通用的 sql 解决方案,而不是特定的 H2 数据库解决方案。

【问题讨论】:

Conditional Unique index on h2 database的可能重复 我不确定它是否重复。当我有多个值为 0 的记录(其中 !is_main )时,我看不到如何使用 unique 你读过我链接的帖子吗?是否清楚地说明了那里的 条件 唯一索引:“当列 y 不等于 0 时应该是唯一的列 x” - 这正是你的情况。 是的,我当然读过。它可以帮助我寻找我需要的东西。使用您建议的术语,我将需求定义为:“当所有其他 x 记录等于 0 时,列 x 应该是唯一的”甚至更好:**“当 col x 为 1 时,将所有其他 x 记录设置为 0” @OferYuval 如果我理解正确,the other answer 和你的问题之间的区别是你想要强制至少总是一种主要货币? Here's a duplicate on dba.se. 【参考方案1】:

我实际上会将主要货币保存在这样的第二张表中:

create table settings (key char(255), val char(255)). 

您可以在其中存储一个键值对,例如 main_currency='USD' 等。然后,您可以进行查询,例如

select * from currencies left join settings where settings.val=currencies.iso_name and settings.key='main_currency'

【讨论】:

感谢@John Trash,这就是我现在正在做的事情,但我想尝试将它们全部放在一张桌子上。 但是为什么呢?实际上,当您将一整列用于仅一个元组的信息时,您会浪费大量空间(在逻辑方面比实际内存更多)。这在数据库设计中通常是个坏主意。 很高兴知道。谢谢您,我会考虑到这一点,并可能保留设计原样。 +1【参考方案2】:

例如,默认货币的 ISO 名称使用小写字母。或所有其他的大写和小写。它将被排序在顶部。

【讨论】:

这并不能解决问题,它只是添加了一个新问题。现在您需要确保只有一个名称是小写的,并且您拥有一种名称格式不同的货币。

以上是关于一条依赖于 sql db 中所有其他表记录的记录的主要内容,如果未能解决你的问题,请参考以下文章

SQL 显示一条记录是不是存在于多个表中

表A中一条记录的两个字段都对应于表B的同一个字段 如何查询?SQL, thinkphp[5]

如何确保仅从特定表中选择第一条记录,该表可以在 DB2 中包含多个相同 ID 的记录

Oracle通过一个字段的值将一条记录拆分为多条记录

我想使用 SQL for DB2 z/OS v9 计算模式中所有表中的记录

Python查询sql db中的最后一条记录,但返回空白记录