我有这张表包含这些列,我想让它满足3NF。我所做的是将DOB,City,Province,Postcode移到另一个名为2ndCus的表格。但是,我仍然不确定我是否正确地做了。你怎么看?3NF - 我做对了吗?
CustomerID
LastName
FirstName
DateofBirth
Address
City
Province
PostCode
Email
Phone#
我有这张表包含这些列,我想让它满足3NF。我所做的是将DOB,City,Province,Postcode移到另一个名为2ndCus的表格。但是,我仍然不确定我是否正确地做了。你怎么看?3NF - 我做对了吗?
CustomerID
LastName
FirstName
DateofBirth
Address
City
Province
PostCode
Email
Phone#
好了,不知道你的总要求,我不能肯定,但一个合理的猜测是这个样子:
CUSTOMERS
---------
CUSTOMER_ID
LAST_NAME
FIRST_NAME
DOB
ADDRESSES
---------
ADDRESS_ID
ADDRESS_TYPE
ADDRESS
CITY
PROVINCE
POSTCODE
EMAIL_ADDRESSES
---------------
EMAIL_ID
EMAIL_TYPE
EMAIL_ADDDRESS
PHONE_NUMBERS
-------------
PHONE_NUMBER_ID
PHONE_NUMBER_TYPE
COUNTRY_CODE
AREA_CODE
PHONE_NUMBER
然后你就可以有交集表的多对多多种关系,如:
CUSTOMER_ADDRESSES
------------------
CUSTOMER_ID
ADDRESS_ID
CUSTOMER_EMAIL_ADDRESSES
------------------------
CUSTOMER_ID
EMAIL_ID
CUSTOMER_PHONE_NUMBERS
----------------------
CUSTOMER_ID
PHONE_NUMBER_ID
这只是一个例子,它可以得到比这更多的参与。
另一个想法:当涉及到地址类型,电子邮件类型,电话号码类型等时,这些可以通过检查约束或有效表来实现,具体取决于添加/删除的“流失”数量类型。
希望有所帮助。
+1:和电话号码? –
哎呀,我想我忽略了这一点。我会添加它。 –
感谢您的详细解答。它确实帮助我更好地理解了这个想法,但是我想知道是否有任何可能的方法来创建只有1个额外的表格,并且仍然符合3NF的要求。 – UserFriendly
不正确。 DOB与地址无关...... – Randy
规范化是所有的乐趣和游戏,直到你必须在每个查询中加入50个表格 – developerwjk
@Randy:它确实不是。但它与客户有关 – zerkms