我正在尝试建立一个表,该表链接来自不同表的两个记录。这些链接本身需要与另一个表相关。因此,目前,我的表格如下所示:
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编号)并在应用程序内进行重复检查?
提前致谢!
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。
item_id_1>item_id_2