【发布时间】:2011-11-04 01:47:04
【问题描述】:
我刚开始学习数据库规范化,我对我的一张表有疑问。我现在的数据库结构很糟糕,其中一个原因是因为我有一个看起来像这样的表。
客户表
ID | Date_Entered | First_Name | Middle_Name | Last_Name | Maiden_Name
...
Address__street_dmv | Address_city_dmv | Address_state_dmv | Address_zip_dmv
...
Address__street_source2 | Address_state_source2 | Address_city_source2 | etc
.
由于我的公司从多个来源获取地址数据,因此地址不断出现。但是,当然,其中一些地址对于我们的一些客户来说是空的。所以我想我需要一个像这样连接到客户表的单独地址表。
.
地址
ID | Number | Street | State | Zip | Source (drop down menu)
但后来我认为来源是冗余数据。那么,我需要这样一个单独的源表吗?
来源
Source_ID | Source
然后像这样更改地址表?
ID | Number | Street | State | Zip | Source _ID (drop down)
这似乎不对,因为现在 Source_ID 是多余的……请帮忙。
如果您能告诉我是否应该在 Customer 表中包含 Maiden 和 Middle 名,则可以加分,因为这些也可能为 Null(如果没有,新表的结构如何?)
对不起,我是菜鸟。
【问题讨论】:
-
嘿,你在正确的轨道上,不要难过。我们随时为您提供帮助(尤其是措辞优美的此类具体问题)。虽然我认为,从我不断听到的关于 Access 的内容来看,有些人会推荐不同的数据库产品......(我自己从未使用过,所以不能说)。
-
数据库规范化旨在使您的数据更可靠、更易于使用并且您的结构更易于理解。您绝对应该标准化您的数据以实现这三个目标。但是,很可能过度规范化数据库。如果为了可靠性而不需要为一条信息创建另一个表,并且只是在您的常见查询中强制另一个连接,那么不要这样做。未婚/中间名是可以将其留在主表中的情况之一。
-
你需要复制一个像 Source_ID 这样的字段,这样你就可以连接两个不同表的记录。这是复制数据的例外,这就是关系数据库的工作方式。
-
@X-Zero - 当有人学习如何用手锯砍树时,不要推荐电锯,直到他们掌握基本知识。访问对于许多应用程序来说都很好。大多数被 Access 劝阻的人都没有使用改进的最新版本。
-
@X-Zero:每个数据库引擎都可以进行非规范化。没有特定于 Access 的东西会导致人们创建电子表格数据表——这通常是人们对数据库设计不够了解的情况。我已经看到了足够多可怕的网站数据库,知道这个问题绝不限于 Access 用户......
标签: sql database database-design ms-access ms-access-2007