SQL 归一化:数学?

SQL normalization: Mathematical?

我正在学习 class 数据库设计。课程主要侧重于规范化。这些步骤和方法不言而喻,但我发现直觉方面令人沮丧。是否有一种数学方法来处理数据规范化,可以分配属性并得出数学上确定的结论?

我将在有关地址的讨论中给出另一个现实世界的例子。

您是架构师,负责使用包含地址信息的旧数据库重新设计遗留应用程序。 数据库当前有 1 个字段用于所有地址信息。

我们的地址是这样的:

Address
___________________________________
Bob Robertson 123 Broad Way Springfield IL 62701

不接受table!让我们稍微规范一下以删除一些冗余,所以在我们的第二遍中,我们将它分成几个字段:

Address1        Address2        City          State   Zip
________        ________        ____          _____   ____
Bob Robertson   123 Broad Way   Springfield   IL      62701

嗯,你说的是,一个州内有多个地址,所以我们需要将其分解为一个查找 table,这样我们就可以在该城市名称上节省大量 space,街道名称与该街道上存在的所有号码之间存在一对多关系。

我们还需要表示 9 位邮政编码,一个 5 位邮政编码有多个 4 位后缀,因此也需要它自己的 table 才能完全正常化这种关系,我是聪明!

此外,我们可能有多个 robertson 和多个 Bob,我们需要将其运送到那里,因此我们也需要交叉引用查找 table。

此时,我们的table可能是这样的:

FirstNameID     LastNameID    StreetID  StreetNum     CityID    StateProvinceID   ZipID   4DigitSuffix
__________      _________     ________  ___________   ______    _______________   _____   ___________
3452            1257          45        234           990       32                123     1234

如果您向最理性的开发人员展示此内容,需要 6 个或更多连接才能获取地址信息,您可能 运行 乘火车出城。 在许多情况下,存在满足业务需求和 speed/ease 发展的最佳中间地带。