2009-02-03 51 views

回答

10

您应该遵循规范化原则,而不是关注表中列的绝对数量。业务需求将推动实体,他们的属性和他们的关系,没有绝对数量是“正确的”。

11

有间 列数和良好的 正常化过程中的任何关系?

总之,没有。一个3NF规范化表将有尽可能多的列需要,只要该表内

数据是关键,整个键,并没有什么 但关键取决于 (帮帮我吧科德)。

有些情况下(一些)非规范化可能实际上提高了性能,而唯一的实际测量方法是测试它。

+0

+1的短语:“表中的数据是依赖于键,整个键,不过按键(帮帮我吧科德)。”真是一个伟大的线......我感到惊讶,我以前从来没听过。你做这件事或者你有一个来源? – 2009-02-03 13:23:26

+0

我相信我第一次听到它在SQL Server 2005圣经中由Paul Nielsen - http://www.amazon.co.uk/Server-2005-Bible-Paul-Nielsen/dp/0764542567/ref=sr_1_1?ie=UTF8&s = books&qid = 1233667734&sr = 8-1 我只是做了一个搜索,找不到那个短语,但几乎可以确定它是来自这里的 – 2009-02-03 13:29:13

+0

同意的,真棒短语+1。 – RedFilter 2009-02-03 13:41:19

3

虽然我@ocdecio同意,我也观察到,被归一化的数据库一般都有每个表的列数较少,比一个不是更多的表,在相同的数据存储需求。类似于代码味道,给定相当大的应用程序的数据库味道会相对较少。这可能暗示您的数据可能不是正常形式。在适当的情况下应用规范化规则将缓解这种“气味”。

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 

在该表中的人,但显然不是所有的人都需要有用户因此用户名和PasswordHash字段为空。然而,它可能会有比用户多1或2个数量级的人。

在这种情况下,我们可以创建一个用户表来保存用户名和PasswordHash领域有一个一对一的关系Person表。

您可以通过查找套可空字段,要么空在一起有共同价值观和显著可能是空推广这一做法。这表明您可以提取另一张表格。

编辑

得益于斯蒂芬妮(见注释)这种技术显然是被称为“垂直分区”

0

每一列必须有主键的直接和独家合作关系。如果你有一个属性很重的项目,那么你可以做的只是简化模型。任何分裂成多个表的尝试都会产生反作用,毫无意义。

相关问题