替代在几乎每个表中使用相同的外键

时间:2011-02-10 17:54:44

标签: sql-server-2008 database-design

我正在使用一个数据库,其中“几乎”数据库中的每个表具有相同的字段和相同的值。例如,几乎所有表都有一个名为GroupId的字段,现在数据库中只有一个组ID。

优势

  • 所有数据都与该字段相关,并且可以通过所述字段识别
  • 创建新组时,将为组
  • 正确识别数据

缺点

  • 所有表格都有此字段
  • 所有存储过程都需要将此字段作为参数
  • 所有查询都必须按此字段过滤

这是一个大问题吗?这种方法有替代方案吗?

由于

1 个答案:

答案 0 :(得分:0)

如果您将来需要能够识别多个组的数据,那么拥有外键是一种很好的做法。但是,这并不意味着所有表都需要具有此字段,只需要与该组直接相关的表。例如,具有状态值的查找表可能不需要它,但customers表可能。当你试图删除一条记录并且必须检查579个表(其中只有25个是相关的)时,它会毫不犹豫地将它添加到所有表中。所有这些在很大程度上取决于群体的意义。我们的大多数表都与客户端表有关系,因为它们包含与特定客户端相关的数据,因为我们不希望各种客户端能够查看其他客户端的数据。不包含这种数据的表不会。

是的,大多数查询可能需要该字段,并且许多存储过程将希望将其作为输入变量,但如果您确实需要对此信息进行过滤,那么就应该如此。

但是,如果只有一个组,并且永远不会超过一个组,则浪费时间,精力和空间。