在用户定义的数据类型列中跨行强制实施唯一约束

时间:2017-08-23 16:42:56

标签: sql xml postgresql

假设您有一个只有一列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>

现在假设您要在应用程序代码中强制执行“电子邮件”的完整性约束。列在所有行中都是唯一的,就像数据库UNIQUE约束一样。如果我使用常规数据库列来保存它,数据库本身会为我处理这个问题,但是因为我现在使用这个设计,所以我必须自己做。

所以,我在这里问一下在代码中实现这一目标的正确方法。在我看来,唯一的方法是每次用户需要添加另一行更新名称&#39;现有的一行。

还有其他选择吗?

1 个答案:

答案 0 :(得分:0)

使用RDBMS(关系型)数据库系统,这样做真的没有意义吗?您的值是xml文档本身,如果您关注电子邮件作为值,它将拥有自己的列。它并不意味着你不关心它是唯一的 - 这是关系模型的重点。

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

有许多基于文档的数据库系统可能适合您的需求,但这确实是您想要做的。很难说更多,因为他们都有不同的目标和行为以及跟踪记录。