SQL规范化:数学的



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

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

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

我们的地址看起来像这样:

Address
___________________________________
Bob Robertson 123 Broad Way Springfield IL 62701

无法接受!让我们将其规范化一点,以消除一些冗余,因此在第二遍中,我们将其分解为几个字段:

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

好吧,你说,在一个州有多个地址,所以我们需要把它分解成一个查找表,我们可以在城市名称上节省大量的空间,并且街道名称和该街道上存在的所有号码之间存在一对多的关系。

我们还需要表示9位数的邮政编码,一个5位数的邮政编码有多个4位数的后缀,所以它也需要自己的表,以便完全正常化这种关系,男孩我很聪明!

同时,我们可能有多个robertsons和多个Bobs,所以我们也需要一个交叉引用查找表。

此时,我们的表看起来像这样:
FirstNameID     LastNameID    StreetID  StreetNum     CityID    StateProvinceID   ZipID   4DigitSuffix
__________      _________     ________  ___________   ______    _______________   _____   ___________
3452            1257          45        234           990       32                123     1234

如果您向大多数理性的开发人员展示这个,需要6个或更多的连接来获取地址信息,您可能会被赶出轨道。在许多情况下,存在一个最优的中间地带,既满足业务需求,又能加快/简化开发。

最新更新