Postgres / SQL数据库:如何强制使用键/值对的唯一组合

时间:2017-01-31 07:40:35

标签: sql postgresql

新项目需要动态数据模型,这意味着记录的属性存储在一个单独的表中,如下所示:

Items:
ID | insertiondate
 1 | 2017-01-31


Properties:
ID | fk_Item_ID |     Key      |     Value
 1 |     1      |  referenceNr |       1
 2 |     1      |    office    |       O1

...

我现在需要的是强制执行" referenceNumber"在独特的办公室"。

因此,使用2个值(1,O2)插入此表是正常的以及(2,O1) - 但是(1,O1)必须违反约束。

有没有一种简单的方法可以解决这个问题?

1 个答案:

答案 0 :(得分:1)

即使项目确实要求输入一些键/值条目,referencenroffice似乎也不是这样,因为您希望对该对应用约束。因此,只需将两者放在项目表中并添加约束。

我看到的唯一另一个选择是创建两个条目:

ID | fk_Item_ID | Key                  | Value
 1 |     1      | 'referenceNr/office' | '1/01'

我会选择第一个解决方案。只有在绝对必要的情况下才能使用键/值对(以及DBMS可能会忘记其内容和相互关系)。