Nullable列与MS SQL Server数据库中的单独表 - 哪个更好?

时间:2017-06-25 09:23:49

标签: sql sql-server database database-design relational-database

我正在使用SQL Server数据库。假设我有一个名为' Company'的实体。和2种类型的公司'是:1)本地,2)国际。就我而言,本地和国际公司之间没有等级关系。

假设本地和国际公司共享10个共同属性,并且有15-20个属于国际公司的属性。

我要创建2个表,它们之间有1-1关系。     1-公司(这将包含常见的列,     2- InternationalComopany(这将包含CompanyId作为ForeignKey和15-20个专门针对国际公司的列)

OR

我应该使用一张名为'公司'并将每列放入该表(包括15-20个可空列)?

在这种情况下我发现需要考虑的事项是什么? 多少可以为空的列在选择两个选项之一时有所不同? 在两种情况下,性能会受到什么影响?

1 个答案:

答案 0 :(得分:1)

您要考虑的主要事项是外键关系。其他表格是指“公司”吗?或者,其他表格是指“本地公司”还是“国际公司”?

如果关系是针对所有公司的,那么您需要一个表。这允许您强制执行数据完整性关系。

如果关系始终是一种或另一种类型,那么您可以将它们放在两个不同的表中。他们似乎是两个不同的实体。

如果有时关系是一种类型,有时是另一种类型,那么你通常会想要一个表中的所有值。还有其他方法可以处理“特定类型”关系。

是否将其他属性存储在同一个表中是下一个问题。这样做几乎没有什么害处 - 您可以轻松地为一种类型的公司或另一种公司创建视图。

您何时会将国际公司的其他列放在另一个表中?以下是一些标准:

  • 列的大小。如果所有列都占用数据页面上的空间。您必须决定是否要将此空间用于所有公司。这取决于列的数量和类型。
  • 本地公司与国际公司的相对数量。如果大多数公司都是国际公司,那么这些额外的列通常用于保存价值。
  • 如何使用列。如果大多数查询通常只使用本地公司的列,则无需读取其他列。这类似于“垂直分区” - 在不同的表中存储不常使用的列。
  • 列是否有不同的访问要求?授予对表的访问权限比表中的列更容易。