2013-01-10 46 views
0

我有一个关于正常化的问题,关于我的场景是什么水平的正常形式。我有几个表具有相同的字段 - 名称地址1,地址2,邮政编码和电话号码;数据库规范化;重复字段

Client [id, instructor id, name, address, postcode, phone, practical, theory] 
Staff [id, office id, name, job, address, postcode, phone] 
Registration id, name, address, postcode, phone] 
Office [id, manager id, address, postcode, phone] 

将任何正常的形式存在,它们分开字段弄成这样......

Client [id, instructor id, details_id, practical, theory] 
Staff [id, office id, details_id, phone] 
Registration [id, details_id] 
Office [id, manager id, details_id] 

Details [id, full_name, address1, address2, postcode, phone_no] 

不知道,如果正常化工作一样,但它仅仅是一个想法...

+0

地址表?好,当然。但是,我会在实体中保留名称。 SOmeone谁曾面临类似的问题:http://stackoverflow.com/questions/5530681/normalize-an-address – mcalex

+0

谢谢,但我想知道什么样的标准化,这将是下。 NF3?我不明白它100%.. – Callum

+0

从多个表中分离出类似的字段不是正常形式的问题。您的每个原始表格都已经是3NF了。将多个表中的所有类似数据收集到一个不是一种标准化技术。做这样的事情的原因更有可能是使您的维护代码合理化。唯一可能的例外可能是如果您的表是所有共享地址属性的超类型的子类型。如果是这种情况,那么你已经倒过来了一点关系。 'Details'实际上是'Supertype'。 –

回答

1

在多个表中放置具有相同含义的列不需要进行规范化。它与数据库设计的不同正式原则有关。 Chris Date称之为The Principle of Orthogonal Design或POOD。

据我所知,POOD的形式逻辑还没有像正常形式那样被深入研究或被广泛接受。这是一个观察,而不是批评。