0

假设我有一组数据。这是某些城市的一组房屋。

House 1 | 123 Fake St | Notatown
House 2 | 456 Not Rd  | Notatown
House 3 | 789 Foo Cres| Barville
...

然后想象数据以这样的方式进行,有很多记录。

将其直接导入表中是否更好,每个房屋都有记录,并完整地填写城镇 - 还是创建一个关系表来存储一个 id 以及城镇名称,并且必须插入多个表?IE:

1 | Notatown
2 | Barville
...

如果是这样,会考虑做上面的关系表的什么“正常形式”?

4

2 回答 2

0

城镇名称直接在houses 表中的版本可以认为是第二范式(2NF),因为城镇的瞬态关系没有移动到自己的表中。

您是否需要将其重构为第三范式实际上取决于您的要求。

于 2013-08-06T11:15:57.843 回答
0

这完全取决于您将如何处理数据。

一般来说,将城镇名称存储在地址字段中并不是什么可怕的罪过。您是正确的,更规范化的存储将有一个单独的“城市”表,其中包含用于查找城市值的键。当要更新数据时,这种结构更为重要。对于静态数据(城市名称变化不大),它不太重要。

将城镇名称保留在一张表中的优点是便于人们阅读,并且对于只需下载地址表的技术含量较低的用户来说。

将城镇名称移动到另一个表的优点是一致性、可更新性和保留数据库的 ACID 要求(原子性、一致性、隔离性和持久性)。此外,如果城市名称往往超过四个字符,规范化版本可能会节省空间。(后者不适用于压缩列值的列式数据库。)

这两种情况下,您都需要对地点的替代拼写保持敏感。如果您有城镇的主列表,请使用该列表并突出显示不匹配的值。这也假设“城镇”不是您业务的核心。例如,为客户名称提供一个单独的表格非常重要,因为您不希望拼写错误导致客户数量过多。

于 2013-08-06T11:17:01.233 回答