代码之家  ›  专栏  ›  技术社区  ›  Henry Woody

一个表到自身的sql连接表

  •  0
  • Henry Woody  · 技术社区  · 7 年前

    我试图在postgres中创建一个表来表示同一个表的行之间的多对多关系。

    我有张桌子叫 外衣 (就像夹克等)我想在 外套 是的。

    我想知道最好的方法是创建一个连接表来建模这个关系,它考虑到 一个 一个 是的。到目前为止,我得到了这个(这只是一个普通的连接表):

    CREATE TABLE outerwear_outerwear_join (
        a_outerwear_id integer REFERENCES outerwear,
        b_outerwear_id integer REFERENCES outerwear,
        PRIMARY KEY(a_outerwear_id, b_outerwear_id)
    );
    

    但这也不能解释这样一个事实:改变列的顺序不应该改变行的值/唯一性。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Kaushik Nayak    7 年前

    创建 UNIQUE INDEX ,使用 least greatest 功能。

    CREATE UNIQUE INDEX unq_test_a_b 
      ON outerwear_outerwear_join ( LEAST(a_outerwear_id, b_outerwear_id), GREATEST( 
    a_outerwear_id, b_outerwear_id)); 
    

    Demo