Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL规范化:数学?_Sql_Database Normalization - Fatal编程技术网

SQL规范化:数学?

SQL规范化:数学?,sql,database-normalization,Sql,Database Normalization,我正在上数据库设计课。课程主要侧重于游牧化。这些步骤和方法不言而喻,但我觉得直觉方面令人沮丧。是否有一种数学方法来处理数据规范化,在这种方法中可以分配属性并处理数学上确定的结论?在关于地址的讨论中,我将给出另一个真实世界的例子 您是架构师,负责使用包含地址信息的旧数据库重新设计旧应用程序。 DB当前有1个字段用于所有地址信息 我们的地址如下所示: Address ___________________________________ Bob Robertson 123 Broad Way Spr

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

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

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

我们的地址如下所示:

Address
___________________________________
Bob Robertson 123 Broad Way Springfield IL 62701
FirstNameID     LastNameID    StreetID  StreetNum     CityID    StateProvinceID   ZipID   4DigitSuffix
__________      _________     ________  ___________   ______    _______________   _____   ___________
3452            1257          45        234           990       32                123     1234
不能接受!让我们将其规范化一点,以消除一些冗余,因此在第二遍中,我们将其分解为几个字段:

Address1        Address2        City          State   Zip
________        ________        ____          _____   ____
Bob Robertson   123 Broad Way   Springfield   IL      62701
你说,一个州内有多个地址,所以我们需要将其分解成一个查找表,我们可以在该城市名称上节省大量空间,streetname和该街道上存在的所有号码之间存在一对多的关系

我们还需要表示9位数的邮政编码,一个5位数的邮政编码有多个4位数的后缀,因此也需要它自己的表来完全规范这种关系,伙计,我真聪明

此外,我们可能有多个Robertson和多个Bob,我们将东西发送到这些Bob,因此我们也需要一个交叉引用查找表

此时,我们的表可能如下所示:

Address
___________________________________
Bob Robertson 123 Broad Way Springfield IL 62701
FirstNameID     LastNameID    StreetID  StreetNum     CityID    StateProvinceID   ZipID   4DigitSuffix
__________      _________     ________  ___________   ______    _______________   _____   ___________
3452            1257          45        234           990       32                123     1234
如果您向大多数rational开发人员展示了这一点,仅仅为了获取地址信息就需要6个或更多的连接,那么您可能会被赶出城市。
在许多情况下,都有一个最佳的中间地带,可以满足业务需求,也可以加快/简化开发。

我理解您在挫折方面的感受,但我不确定这个问题是否能够像目前这样得到回答。您是否可以提供一个标准化练习的例子来说明您提到的直觉问题,并简要说明您发现困难的部分(以及原因)?除此之外,请记住这一切都是关于依赖性的,最终目标是减少冗余。如果您在处理解决方案时能够记住这一点,那么希望这会有所帮助。根据我的经验,规范化肯定更像是一门艺术,而不是一门科学,因为在执行此任务时还需要考虑开发团队的需要和性能。例如,假设你获得计算机科学学位后,你是一个项目的架构师,你写出了关于规范化的书,分析了你的数据模型,并开发了一个完美的第500个标准格式数据库。您的开发人员和潜在客户将诅咒您的名字,因为在中开发非常困难,性能可能会受到影响。在一个实际项目中,标准化的级别可能是非最佳的,因为您在这里没有进行任何标准化,也没有减少冗余。规范化不会引入新列。相同值的多个外观在有冗余或无冗余的情况下发生。(参见矿山重新规范化和/或冗余的答案。)