表中有多少个“太多”字段?
我有一位同事正在规划一个新应用程序的数据库,该应用程序将包含多个每个超过30个字段的表。这是否过分?也许我只是没有足够的理解力去理解。表中有多少个“太多”字段?
编辑:另外,很多字段都是选项类型的东西(比如在请求表单上,你喜欢你的小部件是黄色还是绿色,他有一个用'枚举'的字段和枚举) 。这很可能会随着时间的推移而被添加或删除。我没有真正完成数据库设计,并试图远离它自己,所以也许我是完全愚蠢的,但肯定有更好的方式来做到这一点?
回答:
没有任意的限制;足以完成这项工作是一个很好的经验法则
,如果你有更好的数据库设计,表明它
,如果你想了解更多详细的反馈,发布模式
回答:
当然,标准答案是它取决于。在某些情况下,具有许多领域的桌子实际上可能具有相当大的意义。
想想你要存储在那里的数据。这些字段很可能是NULL吗?这些字段发生变化的可能性是什么(例如:增加了更多)?
如果只有某些字段适用于某些对象,可能考虑将这些字段放入另一个表中。或者,将基本常用字段存储在一个表中,将额外信息存储在另一个表中,每个字段一行。至于I suggested为a different question (which might be helpful to you):
refs (id, title, refType)
-- title of the reference, and what type of reference it is
fieldDef (id, fieldName, refType, dataType)
-- name of the field, which reference types it applies to, and
-- what type of data is stored in these fields (ISDN number, date, etc)
fields (refId, fieldId, value)
-- where you actually add data to the references.
请注意,这是downvoted,而且很可能有很好的理由。这是选项,不一定是最好的选择,但它仍然是一个可行的方法。然而,我在那里提出的问题中表决得分最高的答案可能是最好的解决方案。
编辑:既然你说,这会拿着东西像每个用户的设置(例如:小部件的颜色),其实我建议以上(含三个表)中列出的方法。很有可能大多数人会将事情置于默认状态,所以你会有一堆无用信息被存储。请在另一个问题上阅读我的答案,因为其他读者已经指出了这种方法的缺点。
回答:
字段数通常不是问题,但是您要确保数据库正确无噪音。 Third normal form是一个好的开始。
回答:
如果你不得不问,“这张桌子里有太多的字段吗?”那么可能有。
回答:
一个告诉的标志就是你说的。他的领域理论上应该分成不同的表格。另一个赠品是许多可选领域的存在。
我想说,数据库设计课程是为了您的数据库“专家”。而且我建议你也可以这样做......它只能帮助你在你的职业生涯中成长:)
回答:
数据库表可以合法地拥有30个或更多字段。你需要看的是数据的规范化以及这种规范化是否有意义。它通常也会在将来改变。但是,你想尽量减少这一点。例如,如果你有一个表中包含地址的表,你是否在该表中包含城市,州和邮政编码字段?或者,您是否只包含一个“指向”这些值的单独表格中的记录的字段?单独的表格将包含独特的城市,州,邮编组合。将数据拆分为两个表的效果是减少了存储的数据量(很可能但不是绝对的),但是当您对数据库运行查询时会增加一些复杂性。现在,你必须处理2个表格而不是一个表格。但是,在光明的一面,它更干净,更小(可能)。
真正的答案是在适当的情况下将城市状态的zip数据保留在地址表中。或者,您可能想要“正常化”出来。两者都可以。
寻找一位优秀的数据库管理员,并聘请他们短期审查计划,如果它在预算之内。它将长期得到回报。
回答:
三十个字段不是太多 - 你只需要确保你的数据正常化(网上有很多指南)。
根据你的编辑,你指定很多列将是可以添加或删除一段时间的选项类型的字段,我会建议以下是一个更好的主意。
BaseTable: Id
NonOptionFields
OptionTable:
Id
OptionName
OptionValue
然后,您可以将所有选项绑定到基本记录。这意味着你不必一直向表中添加和删除列来实现你想要的东西。
回答:
表格需要规范化的最明显标志是我见过的是以整数结尾的字段:CouponCode1,CouponCode2,CouponCode3 ..你明白了。尽管如此,规则将会有例外。
回答:
游击指南正常化逐默认:
- 甲表应该有一个主键和至多一个其他列。
- 仅根据需要按规则打破规则1。
回答:
数据库理论中的字段数没有限制。一张表可以限制为一个主键(即使这个主键由两个字段组成),这意味着Apocalisp's answer不是很清楚。在相反的情况下,只要normal form rules受到尊重,桌子就可以制成田野。
当一组表中的字段明显未被充分利用时,在主表和“子”表之间使用0-1关系拆分另一个表中的这组字段会很明智。为了安全起见,它也经常被提出来(很久以前:我认为这是我的第一本关于关系数据库的书,首次发表于197年),它将另一张表中的机密信息以相同的0-1主要和次要之间的关系。然后可以轻松地限制用户对“子”表的访问。现在可以通过视图轻松管理这样的配置。
回答:
术语“太多”是相对的......您不应该为了减少字段数量而拆分表格,特别是在每次查询时,您都必须将它们加入因为它们基本上是一对一的关系。如果这些字段可以被分解成一个单独的逻辑对象,那么它就会有意义。例如,不是将地址字段存储在客户表上,而是将其移动到单独的地址表中。这是一个粗略的例子,但它说明了我的观点。
回答:
OLTP
从我设计数据库的经验,也有一个规范化的OLTP数据库中包含一个疯狂大量列的极少数表。
IMO 30列太多了。
对我来说,不超过10%的OLTP表有大量(> 10)列。
OLAP
现在,如果你要做一个尺寸/报告结构,有些人可能会考虑30列的表为很窄。
以上是 表中有多少个“太多”字段? 的全部内容, 来源链接: utcz.com/qa/263295.html