3

我有十个或更多(我不知道)具有相同数据类型的名为 foo 的列的表。
我如何告诉 sql 所有表中的值都应该是唯一的。
我的意思是如果(我在 table1 中有值“1”)我不应该在 table2 中有值“1”

4

5 回答 5

4

有一个共同的 ID 表,这十个表引用。这会很好地工作,因为它将确保唯一的 ID,但并不意味着如果有人真的想要,你就不能在表中复制 ID。

我的意思是一个公共 ID 的表确保您没有重复插入(通过也将一个 ID 插入到这个公共表中),但要保证它永远不会发生的方法是将业务规则构建到系统或放置检查约束以交叉引用其他表(这将确保唯一性,但会降低性能)。

于 2010-03-08T21:11:05.183 回答
1

这个问题措辞含糊;如果您需要在多个表中生成唯一的列,请使用行 GUID 或通用 ID 生成器表;如果您需要强制唯一性(并且字段值已经存在),请使用触发器。

通常,如果您生成值,则不需要强制执行任何操作。如果处理得当,生成逻辑将解决这个问题。例如,如果您要插入用户输入,那么您可以并且应该在插入期间强制执行唯一性。作为验证规则或其他东西。

于 2010-03-08T21:16:56.133 回答
0

您可以将字段定义为 GUID(或 SQL Server 中的 UNIQUEIDENTIFIER)。那么无论如何它总是独一无二的。

于 2010-03-08T21:16:24.050 回答
0

如何在每个表上设置一个检查约束,例如 ID % 10 = N(其中 N 是表号,从 0 到 9)。并且每次都使用 IDENTITY(N,10)。

于 2010-03-08T21:19:23.710 回答
0

我建议您的设计可能有缺陷。为什么这些单独的表?最好将它们放在一个具有一个 id 字段和另一个字段的表中,以识别是什么使这些单独的表(例如客户 id)。然后,如果您出于性能原因希望将分区表按客户拆分,则可以阅读有关分区表的信息。

于 2010-03-08T21:23:09.140 回答