一段时间,我的系统管理员错误地将我的数据库恢复到更早的一点
3个小时后我们注意到了这一点,在此期间创建了80个新行(自动增量与外键依赖关系)。
所以在这一点上,我们有80个不同的客户在两个需要合并的表中使用相同的ID
我不记得我们如何解决这个问题,但是花了很长时间
现在,我正在设计一个新数据库,我的第一个想法是使用GUID索引,即使这个用例很少见。
我的问题:你如何与你的身份证长相匹配?
我的意思是,当2位程序员谈论客户时,可以说:
“嘿。我们的客户端874454有问题”。
但是如何使用GUID保持简单,这实际上是一个可能导致一些麻烦和断开连接的问题
感谢
答案 0 :(得分:3)
如果您不使用复制,GUID可能会产生比解决方案更多的问题。首先,您需要确保它们不是聚簇索引(至少是SQL Server中PK的默认值),因为您可以真正降低插入性能。其次它们比整数长,因此不仅占用更多空间而且使连接更慢。每个查询中的每个连接。
你将试图解决一个罕见的问题,从而创造一个更大的问题。而是想办法设置方法,这样你就不需要花费数小时才能从错误中恢复过来。
您可以创建审核解决方案。这样你就可以轻松地从各种失误中恢复过来。并提前编写代码进行恢复。然后在出现问题时相对容易修复。坦率地说,我永远不会允许在没有某种形式的审计的情况下建立包含公司关键数据的数据库。不要太危险了。
或者您甚至可以准备一个脚本将记录移动到临时位置,然后使用新标识重新插入它们(并将子记录上的标识更新为新标识)。你这样做了一次,dba应该已经创建了一个脚本(并将其放在源代码管理中),以便下次需要进行类似的修复时可用。如果你的dba如此无能,他就不会创建并保存这些脚本,然后摆脱他并聘请一个知道自己在做什么的人。
答案 1 :(得分:0)
只需在大多数视图中显示前缀。这就是DVCS所做的事情,因为它们中的大多数都通过十六进制散列来识别大多数对象。
(OTOH,我知道在许多圈子中使用UUID作为主键很流行;但要说服我,需要的不仅仅是一些可怕的故事)