有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

c#应用程序开发:我应该检查表上的primarykey还是假设它应该在那里?

在构建应用程序时,如果您使用的表具有主键,是否应检查该表是否具有主键或没有重复的ID

我遇到了一些我正在维护的代码,这些代码正在检查以确保结果集中没有重复的ID。但是正在检查的id是主键。所以对我来说,这个检查是不需要的,因为你不能有一个主键具有相同的值

但是。。。如果DBA出于任何原因禁用了表上的主键,或者假定主键应该始终存在,是否应检查此项


共 (6) 个答案

  1. # 1 楼答案

    如果它是主键,则约束由sql server强制执行,您无需验证它。因此,通常不能插入具有重复主键的记录。这就是说,您可以暂时停用此约束并执行插入,但在正常情况下,这不会发生

  2. # 2 楼答案

    我认为必须确认应用程序代码中的模式是正确的是一个坏主意。这将是各种担忧的丑陋混合。事实上,应用程序根本不应该关心模式——它应该依赖于一个抽象的数据模型

    验证是另一个问题。您应该主动检查主密钥插入和唯一密钥插入上的重复项,而不是依赖数据库异常来指示重复项

  3. # 3 楼答案

    确保查询实际上只从带有主键的表返回数据。如果此表与查询中的另一个表联接,并且不是一对一关系,则可能会导致返回主表中具有相同ID的多行。在这种情况下,检查重复的代码实际上可能在做一些有价值的事情

    只要不是这样,就删除检查重复项的代码。验证数据库是否正在工作是浪费CPU周期和内存

  4. # 4 楼答案

    我不会检查它,这是一个非常基本的RDBMS原则。如果有人违反了你的代码,你的代码会给出奇怪的答案,我不认为这是不合理的

  5. # 5 楼答案

    我认为应该进行检查,但不是通过应用程序进行检查。您可能没有运行病毒检查,测试数据库中是否有足够的空间,获取硬盘运行状况。。。从你的申请中也可以

    即使您确实从应用程序中检查了PKs,您怎么知道在运行时这不会改变?PKs的存在应该通过数据库部署过程来确保,权限应该足够严格,不能在该过程之外(太容易)更改

  6. # 6 楼答案

    我总是让DB来管理这个规则,因为它最擅长这样做。但当人们出于各种原因放弃主键时,我会被咬——但最好是分开处理,因为这通常是另一个问题的迹象(例如缺乏培训或护理)