小编典典

在SQL中拥有“重复字段”的最佳方法是什么?

sql

我正在尝试建立一个表,该表链接来自不同表的两个记录。这些链接本身需要与另一个表相关。因此,目前,我的表格如下所示:

link_id    (primary key)
item_id_1  (foreign key)
item_id_2  (foreign key)
link_type  (metadata)

但是,项目之间的链接不是定向的(即,项目是链接中列出的第一项还是第二项都没有关系)。理想情况下,我希望item_id字段只出现两次;因为它是我必须要小心,始终检查是否有重复项,以确保如果已经存在14到12,则永远不会创建将12到14链接的记录。

是否有一个优雅的数据库设计解决方案,还是我应该采用一个约定(例如id_1始终是较小的id编号)并在应用程序内进行重复检查?

提前致谢!


阅读 287

收藏
2021-04-28

共1个答案

小编典典

Benzado已经指出了这一点-添加强制执行item_id_1 <item_id2的约束:

ALTER TABLE t ADD CONSTRAINT CH_ITEM1_LESSTHAN_ITEM2 CHECK (item_id_1 < item_id_2)

因此,这将防止输入错误的数据,从而拒绝此类更新/插入。

如果您想在item_id_1>item_id_2的任何情况下自动纠正它,则可以添加触发器(从技术上讲,您可以同时使用两者,但是您可能会有些麻烦,使其无法正常使用,因为可以在触发器触发之前检查检查约束)。触发器的确切语法取决于您的RDBMS。

2021-04-28