我是设计数据库的新手,我想知道在同一个表中的行之间实现多对多关系的规范方法是什么。
在我的例子中,我有一个公式表,我想说表中的两个公式是相关的:
公式表:
formula_id SERIAL PRIMARY KEY
name TEXT NOT NULL
formula TEXT NOT NULL
我假设我会创建一个名为 related_formulas 的新表,然后执行如下操作:
formula_relation_id SERIAL PRIMARY KEY
formula_id INT REFERENCES formulas (formula_id) ON DELETE CASCADE
formula_id2 INT REFERENCES formulas (formula_id) ON DELETE CASCADE
但后来我预见到一些问题,例如防止同一行中的两个 id 具有相同的值。我敢肯定,由于我自己的经验不足,我还没有看到其他潜在的问题。
有人能给我指出正确的方向吗?
最佳答案
来自 SERIAL
我假设 PostgreSQL...
CREATE TABLE formula_relation (
formula_relation_id SERIAL PRIMARY KEY,
formula1_id INT REFERENCES formulas (formula_id) ON DELETE CASCADE,
formula2_id INT REFERENCES formulas (formula_id) ON DELETE CASCADE,
CHECK (formula1_id < formula2_id)
);
(我还假设你的关系是对称的,所以 i
与 A[i]
相关也意味着 A[i]
与 i
相关;因此,formula1_id < formula2_id
确保只能有一个,规范的,行的变体,你不需要检查反向配对。如果关系不对称,你应该只 CHECK (formula1_id != formula2_id)
。)
关于database - 同一张表中的多对多关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32085175/