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 发展的最佳中间地带。
我正在学习 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 发展的最佳中间地带。