在SQL Server中有一个列表被认为是一个坏习惯吗?

时间:2016-05-19 11:44:22

标签: sql sql-server database database-design

一位同事和我偶然发现了一个新获得的数据库模式,其中有多个表似乎只有一列。一个表似乎是某种类型,另一个表是某种频率等等。我们这里只处理一个模式,因此没有实际的数据可供使用。

我们正在考虑过这个问题,而且我们无法真正理解需求,或者“在最佳实践中”只使用一列的信息类型。< / p>

通过我的教育,我们被教导应该总是有一些注释,时间戳,描述或与每个主键相关的信息类型。

通过几次谷歌搜索,我发现许多网站只提到这种行为如何影响主键实践,而不是一般的信息。

所以重申一下我的问题:设计只有一列的表是不是一种错误的做法?如果只有单列,这怎么可能有益呢?有没有你能想到的行业例子?

4 个答案:

答案 0 :(得分:2)

我认为,这取决于这些表的使用。

如果你有很多,那可能是错的。我可以想到单个列表的一些用法,它们可以用作derived tables来生成ID,序列,日期(对于指定月份,年份,可能更有用于1列。)ETC但我相信他们确实有目的。

一般来说,拥有多于一列,某种ID的键列或表的日期总是更好,这样就意味着什么。

如果不好的做法?我相信如此,总是更好地在桌面上获得更多信息,除非它是用于特定目的的特定表格。

答案 1 :(得分:2)

我创建的几乎每个表都包含以下列:

  • 主键(通常是一个数字,在表之后以Id命名)。
  • CreatedAt
  • CreatedBy
  • CreatedOn(创建行的服务器)

单个列表的一个用途是有效地实现检查约束,其中代码可以动态验证值。我通常会使用具有适当外键关系的引用表和上面的列来实现它。

另一个实例是数字表,它只存储整数值。

总的来说,我会说这不是一个好主意。可能存在特定情况,例如数字表,它很好。

答案 2 :(得分:0)

这取决于,并不令人惊讶。

我看到的单列表的另一个案例是实体的锚表,其中每个属性(名称,日期等)都被证明是时间相关的,或者是版本相关的。因此,它们被组织为多个扩展历史/版本表,其中包含一组分组属性,其中每个此类扩展组都是可选的。

答案 3 :(得分:0)

如果该列不是主列,则绝对不是一个好习惯。

但是如果它是主键,并且某个其他表的外键或其他表与此具有外键关系,则它可以是模式规范化的一部分。

您可以通过创建两个列表(ID,PREVIOUSLY_NULLABLE_COLLUMN)而不是可为空的列(或者如果您具有ID,A,B,C,其中A和B都不应该为null或null和C来摆脱空列)是独立可选的,您将拥有(ID),(ID,A,B),(ID,C)表。

如果原始表仅具有可为空的列和主键,则将以一个列表和一堆“列”表结尾。

如果您确实获得了更高的NF(我不记得是哪个),或者您有很多可选的列,则这种方法很有意义。