规范化,困惑

时间:2012-06-27 20:13:00

标签: mysql database

我正在尝试将规范化纳入我的数据库设计中,互联网上的一些解释让我有些困惑 - 我不确定我是否朝着正确的方向前进?

到目前为止,我有:

用户:

id 
username 
password 

userprofilesettings:

id 
userid 
active 
dateofreg 

userbusinessinfo:

id 
userid 
businessname 
tags 

CONTACTINFO:

id 
userid 
address 
postcode 
email 
tel 

分类|:

id 
userid 
services 

3 个答案:

答案 0 :(得分:1)

地址将获得一个自己的表

contactinfo
==========
id
userid
idaddress
postcode
email
tel

address
==========
idaddress
street
houseNumber
postalCode
city
country

...

良好的基础知识:http://databases.about.com/od/specificproducts/a/normalization.htm

答案 1 :(得分:0)

**userbusinessinfo**
id
userid
businessname
tags

标签有什么作用?它听起来像不止一个值,在这种情况下你应该有一个UserBusinessInfoTags表。您还应该使用驼峰大小写字段和表格名称的正确大小写,以便于阅读。

**UserBusinessInfoTags**
id
userBusinessInfo_id
tag

UserProfileSettings持有什么?如果它与用户是一对一的关系,则该表可以与用户合并。

ContactInfo可以分开。用户是否允许拥有多个地址,多个电子邮件和多个电话号码?每个都应该有自己的表。如果没有,请将其与Users合并。例如,如果他们可以拥有多个电话号码和地址,而不是电子邮件,则看起来就像。

**Users**
id
username
password
email

**UserAddresses**
id
userId
addressLine1
addressLine2
city
state
zipCode
country

**UserPhoneNumbers**
id
userId
phoneNumber
phoneNumberType

答案 2 :(得分:0)

规范化是关于减少特定数据存储的次数。您可以在规范化方面走得太远,因为数据库越规范化,其性能就越低。

在平面文件与完全标准化的极端情况下,您将获得一个sql命中的单个记录,而可能从其他表中获得10或20个甚至更多记录。

你的标准化程度(第3范式是理想的IMO,但其他人不同意)完全取决于应用程序及其复杂性。

除了@ duffy356所指出的地址之外,我会说你有正确的意见。