小编h3r*_*ler的帖子

对唯一对的关系建模的最佳方法

我有两张桌子;一种用于存储thing,一种用于存储relationship两个thing对象之间的。

dbfiddle 示例

认为:

  • AB == BA. 存储两者都是多余的
  • A != B. 一个thing与自身的关系是没有用的
  • 计算之间的关系AB是昂贵但幂等的
CREATE TABLE thing (
    id INT PRIMARY KEY
);
CREATE TABLE relationships (
    thing_one INT REFERENCES thing(id),
    thing_two INT REFERENCES thing(id),
    relationship INT NOT NULL,
    PRIMARY KEY (thing_one, thing_two),
    CHECK (thing_one != thing_two)
);
Run Code Online (Sandbox Code Playgroud)

为了确保我们不会INSERT ABBA

CREATE UNIQUE INDEX unique_pair_ix
    ON relationships (
        least(thing_one, thing_two),
        greatest(thing_one, thing_two)
    );
Run Code Online (Sandbox Code Playgroud)

是否有比示例更好或更有效的方法来存储/建模此数据? …

index database-design unique-constraint

10
推荐指数
1
解决办法
479
查看次数

标签 统计

database-design ×1

index ×1

unique-constraint ×1