规范化表应该具有较少数量的列,并且可以尽可能地具有引用字段。这是正确的方法吗? 列数和良好的规范化过程之间是否存在任何关系?
答案 0 :(得分:11)
之间是否有任何关系 列数和一个好 正常化过程?
简而言之,没有。如果
,3NF规范化表将具有所需的列数表中的数据是依赖的 关键,整个关键,什么都没有 但关键(所以帮助我Codd)。
在某些情况下,(某些)非规范化实际上可能会提高性能,并且应该在何时进行测试的唯一真正的衡量标准是测试它。
答案 1 :(得分:10)
您应该遵循规范化原则,而不是关注表中的绝对数量。业务需求将驱动实体,它们的属性和它们的关系,没有绝对数字是“正确的”。
答案 2 :(得分:4)
如果您认为表格中的字段太多,可以使用以下方法。例如: -
CREATE TABLE Person
Person_ID int not null primary key,
Forename nvarchar(50) not null,
Surname nvarchar(50) not null,
Username varchar(20) null,
PasswordHash varchar(50) null
此表代表人,但显然不是所有人都需要用户,因此Username和PasswordHash字段可以为空。然而,可能会有比用户多1或2个数量级的人。
在这种情况下,我们可以创建一个User表来保存Username和PasswordHash字段,并与Person表保持一对一的关系。
您可以通过查找可空字段的集合来概括此方法,这些字段可以将值组合在一起并且很可能为空。这表明您可以提取另一个表。
修改强>
感谢Stephanie(见评论),这种技术显然被称为“垂直分区”
答案 3 :(得分:3)
虽然我同意@ocdecio,但我还会发现,在数据存储要求相同的情况下,规范化的数据库通常每个表的列数更少,而表的数量更多。类似于代码味道,在给定相当大的应用程序的情况下,数据库气味将是相对较少的表。这可能暗示您的数据可能不是正常形式。在适当的情况下应用规范化规则可以缓解这种“嗅觉”。
答案 4 :(得分:0)
每列必须与主键具有直接和排他关系。如果你有一个属性很重的项目,你可以做很多事情来简化模型。任何分裂成多个表的尝试都会适得其反,毫无意义。