我正在尝试将规范化纳入我的数据库设计中,互联网上的一些解释让我有些困惑 - 我不确定我是否朝着正确的方向前进?
到目前为止,我有:
用户:
id
username
password
userprofilesettings:
id
userid
active
dateofreg
userbusinessinfo:
id
userid
businessname
tags
CONTACTINFO:
id
userid
address
postcode
email
tel
分类|:
id
userid
services
答案 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所指出的地址之外,我会说你有正确的意见。