我有十个或更多(我不知道)具有名为foo的列具有相同数据类型的表 我怎么能告诉sql所有表中的值都应该是唯一的 我的意思是If(我在表1中的值为“1”)我不应该在表2中具有值“1”
答案 0 :(得分:4)
有一个共同的ID表,这十个表引用。这将很有效,因为它将确保唯一的ID,但并不意味着如果有人真的想要你不能复制表中的ID。
我的意思是一个公共ID的表确保你没有重复插入(通过在这个公共表中插入一个ID),但事情是保证它永远不会发生的方法是建立业务规则进入系统或放置检查约束以交叉引用其他表(这将确保唯一性,但会降低性能)。
答案 1 :(得分:1)
这个问题含糊不清;如果需要生成多个表中唯一的列,请使用行GUID或公共ID生成器表;如果您需要强制执行唯一性(并且字段值已经存在),请使用触发器。
通常,如果生成值,则无需强制执行任何操作。生成逻辑,如果做得好,将负责这一点。如果您要插入用户输入,那么您可以并且应该在插入期间强制执行唯一性。作为验证规则或其他。
答案 2 :(得分:0)
您可以将字段定义为GUID(或SQL Server中的UNIQUEIDENTIFIER)。然后无论如何它总是独一无二的。
答案 3 :(得分:0)
如何在每个表上设置检查约束,例如ID%10 = N(其中N是表编号,从0到9)。并且每次都使用IDENTITY(N,10)。
答案 4 :(得分:0)
我建议你的设计可能存在缺陷。为什么这些单独的表?最好将它们放在一个带有一个id字段的表中,另一个用于识别正在制作这些表格的表(例如cusotmer id)。然后,如果您希望出于性能原因将客户拆分,则可以阅读有关分区表的信息。