一位同事和我偶然发现了一个新获得的数据库模式,其中有多个表似乎只有一列。一个表似乎是某种类型,另一个表是某种频率等等。我们这里只处理一个模式,因此没有实际的数据可供使用。
我们正在考虑过这个问题,而且我们无法真正理解需求,或者“在最佳实践中”只使用一列的信息类型。< / p>
通过我的教育,我们被教导应该总是有一些注释,时间戳,描述或与每个主键相关的信息类型。
通过几次谷歌搜索,我发现许多网站只提到这种行为如何影响主键实践,而不是一般的信息。
所以重申一下我的问题:设计只有一列的表是不是一种错误的做法?如果只有单列,这怎么可能有益呢?有没有你能想到的行业例子?
答案 0 :(得分:2)
我认为,这取决于这些表的使用。
如果你有很多,那可能是错的。我可以想到单个列表的一些用法,它们可以用作derived tables
来生成ID,序列,日期(对于指定月份,年份,可能更有用于1列。)ETC但我相信他们确实有目的。
一般来说,拥有多于一列,某种ID的键列或表的日期总是更好,这样就意味着什么。
如果不好的做法?我相信如此,总是更好地在桌面上获得更多信息,除非它是用于特定目的的特定表格。
答案 1 :(得分:2)
我创建的几乎每个表都包含以下列:
Id
命名)。单个列表的一个用途是有效地实现检查约束,其中代码可以动态验证值。我通常会使用具有适当外键关系的引用表和上面的列来实现它。
另一个实例是数字表,它只存储整数值。
总的来说,我会说这不是一个好主意。可能存在特定情况,例如数字表,它很好。
答案 2 :(得分:0)
这取决于,并不令人惊讶。
我看到的单列表的另一个案例是实体的锚表,其中每个属性(名称,日期等)都被证明是时间相关的,或者是版本相关的。因此,它们被组织为多个扩展历史/版本表,其中包含一组分组属性,其中每个此类扩展组都是可选的。
答案 3 :(得分:0)
如果该列不是主列,则绝对不是一个好习惯。
但是如果它是主键,并且某个其他表的外键或其他表与此具有外键关系,则它可以是模式规范化的一部分。
您可以通过创建两个列表(ID,PREVIOUSLY_NULLABLE_COLLUMN)而不是可为空的列(或者如果您具有ID,A,B,C,其中A和B都不应该为null或null和C来摆脱空列)是独立可选的,您将拥有(ID),(ID,A,B),(ID,C)表。
如果原始表仅具有可为空的列和主键,则将以一个列表和一堆“列”表结尾。
如果您确实获得了更高的NF(我不记得是哪个),或者您有很多可选的列,则这种方法很有意义。