当表需要太多外键时,有哪些替代方案?

jel*_*key 8 sql-server-2005 foreign-key

我们有一个基表,用于定义部件并保存部件号、描述、价格、重量等信息。我们还有大约 400 个表引用基表,并根据部件的类型/类别提供有关部件的附加信息。

我们首先使用外键约束,这样如果某个部分在 400 个特定于部分的表中的一个中被引用,则无法从基表中删除该部分,但我们很快达到了 SQL Server 2005 的最大 253 个推荐外键。

在这种情况下,是否有任何外键替代方案可以确保数据完整性?我们在访问数据时没有看到性能问题,但由于查询计划太复杂,更新基表中的现有部分将失败。

Mik*_*ll' 6

如果有任何方法可以对部件进行分组,您也许可以引入中间表作为解决方法。 行不通。

Parts
+ Table 1
+ Table 2
+ ...
+ Table 400
Run Code Online (Sandbox Code Playgroud)

但沿着这些路线的东西可能会。

Parts
+ RedOrangeYellow parts
  + Table 1
  + Table 2
  + ...
  + Table 200

+ GreenBlueIndigoViolet parts
  + Table 201
  + Table 202
  + ...
  + Table 400
Run Code Online (Sandbox Code Playgroud)

不过,在我建议这样做之前,我想仔细研究一下您的 DDL 。如果你这样做,不要开始到处乱扔身份证号码。您应该能够将“Table 400”直接加入“Parts”,而不包括“GreenBlueIndigoViolet 零件”。


小智 4

如果确实无法合并表,为什么不在TRIGGER基表上创建一个以防止删除呢?

从这里开始:http ://msdn.microsoft.com/en-us/library/ms189799(v=sql.90).aspx