当前位置: 首页 > 面试题库 >

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

宓诚
2023-03-14
问题内容

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

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。



 类似资料:
  • 问题内容: 这是更新mysql SET字段,从字段中删除特定值的最佳方法。 例如。值分别为1,2,3,4,5的字段类别?我想从列表中删除“ 2”: 但是,如果“ 2”是列表中的第一个或最后一个值,该怎么办? 我如何用一个查询处理所有3种情况? 问题答案: 如果您需要从集合中删除的值不能多次出现,则可以使用以下方法: 看到它在这里工作。如果该值可以多次出现,则将删除所有出现的值:

  • 我和我的同事面临一个问题。我们有几个SQL查询作为字符串。下面是一个例子: 目前,我们将它们作为字符串从查询类中的方法返回。我们希望重构代码,使其干净,因为我们有一个方法有3个以上的参数,这是很难使用的任何方式。 你会怎么做?组织需要大量参数的SQL查询的最干净的方法是什么?我非常感谢任何可能改善我们代码当前状态的答案。 谢谢

  • 问题内容: 我有一个需要删除/过滤重复项的对象数组。我本来只是要在Object元素上覆盖equals和hachCode,然后将它们放在Set中…但是我认为我至少应该轮询一下stackoverflow,看看是否还有另一种方法,也许是某些其他API的一些聪明方法? 问题答案: 我会用你的方法来覆盖同意,并和使用的东西实现。 这样做还使其他开发人员绝对清楚需要非重复特征。 另一个原因-您现在必须选择最能

  • 问题内容: 如果您还希望获得结果总数(在进行分页之前),那么在SQL Server 2000、2005、2008、2012中对结果进行分页的最佳方法(从性能角度而言)是什么? 问题答案: 获取结果总数和分页是两个不同的操作。为了这个示例,我们假设您要处理的查询是 在这种情况下,您可以使用以下方法确定结果总数: …这看似效率低下,但假设所有索引等均已正确设置,实际上却表现不错。 接下来,要以分页的方

  • 问题内容: 复制列表的最佳方法是什么?我知道以下方法,哪种更好?还是有另一种方法? 问题答案: 如果要浅拷贝(不复制元素),请使用: 如果要进行深层复制,请使用复制模块:

  • 问题内容: 这个问题已经在这里有了答案 : 将巨大的(95Mb)JSON数组拆分成较小的块? (4个答案) 5天前关闭。 我可以访问一组文件(每个文件约80-800mb)。不幸的是,每个文件中只有一行。该行仅包含一个JSON对象(列表列表)。加载并将其解析为较小的JSON对象的最佳方法是什么? 问题答案: 已经有一个类似的帖子在这里。这是他们提出的解决方案: