只有一列的表可以吗?我知道这在技术上并不违法,但它被认为是糟糕的设计吗?
编辑:
以下是一些例子:
有人提到添加一个关键字段。我看到它的方式,这个单列将成为主键。
答案 0 :(得分:163)
就relational algebra
而言,这将是一元关系,意思是“这件事存在”
是的,有一个表定义这样的关系是很好的:例如,定义一个域。
这样的表的值当然应该是自然的主键。
prime numbers
的查找表首先出现在我的脑海中。
答案 1 :(得分:81)
是的,以最高效率的方式设计表格当然是一个很好的设计。 “糟糕的RDBMS设计”通常以低效率为中心。
但是,我发现大多数单柱设计案例都可以从额外的列中受益。例如,州代码通常可以在第二列中拼写出全州名称。或者黑名单可以关联注释。但是,如果你的设计确实不需要那些信息,那么单列就可以了。
答案 2 :(得分:28)
我过去曾经使用过它们。我的一个客户希望自动阻止任何试图在这个大名单中注册电话号码的人,所以这只是一个大黑名单。
答案 3 :(得分:17)
如果确实需要它,那么我没有看到问题。也许您只是想要一个由于某种原因显示的可能性列表,并且您希望能够动态地更改它,但不需要将其链接到另一个表。
答案 4 :(得分:11)
我发现的一个案例有时是这样的:
表 countries_id ,只包含一个包含每个国家/地区的数字ID的列。
表 countries_description ,包含具有国家/地区ID的列,包含语言ID的列和包含本地化国家/地区名称的列。
表 company_factories ,包含公司每个工厂的信息,包括Wich所在的国家/地区。
因此,要在表中维护数据一致性和语言无关数据,数据库将此架构与只有一列的表一起使用,以允许没有语言依赖性的外键。
在这种情况下,我认为存在一个列表是合理的。
在回复评论时编辑: Quassnoi
(来源:ggpht.com)
在这个模式中,我可以在表company_factories中定义一个外键,不要求我在表上包含Language列,但是如果我没有表countries_id,我必须在表上包含Language列来定义外键。
答案 5 :(得分:7)
在极少数情况下,单列表是有意义的。我做了一个数据库,其中有效语言代码列表是用作外键的单列表。拥有不同的密钥是没有意义的,因为代码本身就是关键。并且没有固定的描述,因为语言代码描述会因语言而异。
通常,任何需要权威的值列表但没有任何其他属性的情况都是单列表的理想选择。
答案 6 :(得分:5)
我一直使用单列表 - 当然,这取决于应用程序设计是否已经使用数据库。一旦我忍受了建立数据库连接的设计开销,我就尽可能将所有可变数据放入表中。
我可以想到单列表OTMH的两种用法:
1)数据项存在。通常用于下拉列表。也用于简单的合法性测试。
EG。两个字母的美国州缩写;我们发货的邮政编码;在拼字游戏中合法的单词;等
2)稀疏二进制属性,即在大型表中,二进制属性仅对极少数记录为真。我可能会创建一个单独的表,而不是添加新的布尔列,该表包含属性为true的记录的键。
EG。患有绝症的员工;银行年限为360天(最多使用365年);等
-Al。
答案 7 :(得分:4)
只要它包含唯一值就没问题。
答案 8 :(得分:4)
大多数情况下,我在查找类型表中看到过这种情况,例如您描述的状态表。但是,如果这样做,请确保将列设置为强制唯一性的主键。如果您不能将此值设置为唯一,则不应使用一列。
答案 9 :(得分:2)
我会说一般,是的。不确定为什么你只需要一列。我看到有一些例外情况可以有效地使用。这取决于你想要达到的目标。
当你考虑数据库的模式时,它们不是很好的设计,但实际上只应该用作实用程序表。
我过去曾见过numbers tables有效使用过。
答案 10 :(得分:1)
数据库的目的是将各条信息相互关联。当没有数据与之相关时,你怎么能这样做呢?
也许这是某种编译表(即FirstName + LastName + Birthdate),虽然我仍然不确定你为什么要那样做。
编辑:我可以看到使用这种表格来获得某种简单的列表。这就是你用它吗?答案 11 :(得分:1)
是的,只要该字段是您所说的主键。原因是因为如果您插入重复数据,那些行将是只读的。如果您尝试删除其中一个重复的行。它不起作用,因为服务器不知道要删除哪一行。
答案 12 :(得分:0)
我能想到的唯一用例是一个单词游戏的单词表。您只需要访问该表以验证字符串是否为单词:从单词中选择word =?。但是,与关系数据库相比,保存单词列表的数据结构要好得多。
否则,数据库中的数据通常放在数据库中以利用数据的各种属性之间的关系。如果您的数据没有超出其价值的属性,那么这些关系将如何发展?
所以,虽然不是非法的,但一般来说,你可能不应该只有一个列的表。
答案 13 :(得分:-1)
我的所有表至少有四个技术字段,串行主键,创建和修改时间戳以及软删除布尔值。在任何黑名单中,您还需要知道谁添加了该条目。所以对我来说,答案是否定的,除了原型设计之外,只有一列的表是没有意义的。
答案 14 :(得分:-2)
是的,这完全没问题。但身份证领域不能伤害它吗?