繁体   English   中英

在用户定义的数据类型列中的行之间实施唯一约束

[英]Enforce unique constraint across rows in a user defined datatype column

假设您有一个数据库表,其中只有一列xml类型的列可以容纳用户定义的数据类型的各种键/值对,例如:

第1行:

<column>
    <name>id</name>
    <value>1</value>
</column>
<column>
    <name>e-mail</name>
    <value>abc1@abc.com</value>
</column>

第2行:

<column>
    <name>id</name>
    <value>2</value>
</column>
<column>
    <name>e-mail</name>
    <value>abc2@abc.com</value>
</column>

现在假设您要在应用程序代码中强制执行完整性约束,即“ e-mail”列在所有行中都是唯一的,例如数据库UNIQUE约束。 如果我使用常规的数据库列来保存此内容,则数据库本身将为我解决此问题,但是当我现在使用此设计时,我必须自己完成此操作。

因此,我只是在这里问什么是在代码中完成此操作的正确方法。 以我的观点,唯一的方法是每次用户需要添加另一行更新时都阻塞整个表,该行的名称为现有行的“列”。

还有其他选择吗?

对于RDBMS(关系)数据库系统,这样做真的没有意义吗? 您的值是xml文档本身,如果您关心电子邮件作为值,它将具有自己的列。 它并不意味着您不关心它的独特性,这就是关系模型的全部要点。

使用postgres可以创建一个功能索引,但是我不确定这样做是否值得,除非这只是数据库的一个角落,而其余部分都是关系型的。

如果确实要这样做,那么有许多基于文档的数据库系统可能适合您的需求。 很难说更多,因为它们都有不同的目的,行为和跟踪记录。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM