sql – 如何在多个表中强制使用唯一身份验证
我在MySQL服务器中有以下表:
在每一个中,UID是由数据库创建的唯一标识符. 有外键可以确保Employee之间的链接 – >办公室 – >公司在UID上. 办公室和员工中的ExternalID字段是公司(我的客户实际)提供给我的应用程序的ID.客户端没有(也不关心)我自己的ID,我的应用程序从它们收到的所有数据都是根据它们的ID(即我表中的ExternalID)来识别的. 即来自客户端的伪语言请求就像“我是公司X,为我的员工Y更新数据”. 我需要对CompanyID和Employees.ExternalID的组合强制执行唯一性,因此在我的数据库中,同一公司的员工不会有重复的ExternalID. 我在考虑3种可能的解决方案: >更改Employees的架构以包含CompanyID,并在这两个字段上创建唯一约束. 我的替代方案 – dbadmin-in-me sais(3)是最糟糕的解决方案,因为它不会在应用程序错误或其他情况下保护数据库不一致,并且很可能是最慢的. 触发器解决方案可能是我想要的,但它可能会变得复杂,特别是如果需要在单个语句中执行多个插入/更新,并且我不确定性能与(1). 并且(1)看起来是最快速和最简单的方法,但有点违背我对关系模型的理解. SO DB专家对每种方法的利弊有何看法,特别是如果有可能增加额外的间接水平 – 即公司 – >办公室 – >部门 – >员工和相同的唯一性需要保留(公司/员工). 最佳答案 你是对的 – #1是最好的选择.当然,我会乍一看(由于快捷方式),但了解业务规则以确保员工只与一家公司相关 – 这是有道理的. 另外,我有一个外键,将employee表中的companyid与office表中的companyid相关联.否则,您允许员工与没有办公室的公司相关联.除非那是可以接受的…… 如果无法在数据模型中演示关系,触发器是最后的手段,并且从应用程序服务逻辑意味着逻辑是集中的 – 除非有人放下约束(这意味着你有更大的问题),否则不会有坏数据发生的机会). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |