如何在oracle中创建双面复合主键?

时间:2016-07-18 20:58:52

标签: oracle

我有一张桌子,这张桌子与多对多的关系。所以我创建另一个表(第二个表),它存储来自原始(第一个)表的复合主键的两个id。但如果在第二个表中有id1 = 1且id2 = 2,那么第二个表不应该有id1 = 2且id2 = 1。 那么我该怎么做呢,我应该为此编写一个触发器,还是有一个简单的方法来进行oracle。 我使用Oracle11g和pl / sql开发人员。

2 个答案:

答案 0 :(得分:2)

<style>
  a[href^="x-apple-data-detectors:"] {
    color: inherit;
    text-decoration: inherit;
  }
</style>

答案 1 :(得分:2)

您可以尝试定义一个基于函数的唯一索引,该索引会按数字顺序自动定义索引。这将确保只允许两种组合中的一种。类似的东西:

create unique index your_index on your_table(
    least(id1, id2),
    greatest(id1, id2)
);

如果重要,这种方法与使用检查约束的MT0答案之间会略有不同。

使用检查约束方法,只有(id1=1, id2=2)有效。

使用基于函数的索引方法,(id1=1, id2=2)(id1=2, id2=1)都有效,但在任何给定时间它们都不能同时出现在表中。