Database 数据库规范化
我是数据库设计的新手,我读了很多关于规范化的书。如果我有三张桌子:住宿、火车站和机场。我会在每个表中都有地址列,还是其他表引用的地址表?是否存在过度正常化的情况Database 数据库规范化,database,database-design,database-normalization,Database,Database Design,Database Normalization,我是数据库设计的新手,我读了很多关于规范化的书。如果我有三张桌子:住宿、火车站和机场。我会在每个表中都有地址列,还是其他表引用的地址表?是否存在过度正常化的情况 谢谢我认为在这种情况下,在每个表中都有地址列是可以的。你几乎没有一个地址会被使用两次以上。大多数地址将仅用于每个实体的一个地址 但在一张额外的表格中可能会有街道、城市、国家的名称 最重要的是,每个火车站、住宿区和机场可能只有一个地址,因此是n:1关系。对于地址,我几乎总是创建一个单独的地址表。不仅用于规范化,还用于存储字段的一致性 至于
谢谢我认为在这种情况下,在每个表中都有地址列是可以的。你几乎没有一个地址会被使用两次以上。大多数地址将仅用于每个实体的一个地址 但在一张额外的表格中可能会有街道、城市、国家的名称
最重要的是,每个火车站、住宿区和机场可能只有一个地址,因此是n:1关系。对于地址,我几乎总是创建一个单独的地址表。不仅用于规范化,还用于存储字段的一致性 至于过度规范化,绝对有!很难给你关于什么是和什么不是过度规范化的指导,因为我认为它主要来自经验。然而,按照书中关于标准化的每一个层次,一旦开始很难看到事情的进展,你可能已经走得太远了 也可以查看所有示例/示例数据库。它们会给你一个很好的指示,告诉你什么时候应该分割数据,什么时候不应该
另外,要清楚地了解您存储的数据的类型和数量,以及访问速度等。由于许多性能和可伸缩性原因,许多现代web软件正在完全非规范化。这是值得研究的,因为你应该和不应该去正常化的原因和时间。就个人而言,我会选择另一张桌子 我认为它使设计更简洁,使地址报告更简单,并使您需要对地址模式进行的任何更改更容易 如果以后需要对其进行非规范化,则始终可以创建两个视图,其中包含火车站和机场信息以及所需的任何地址信息 我会在每个表中都有地址列,还是其他表引用的地址表 机场、火车站和住宿是否都有不同的地址格式 单个地址表可以最大限度地减少处理地址所需的工作—套件、RR、邮政编码/邮政编码、州/省 是否存在过度正常化的情况
标准化有不同的级别。我只遇到了我认为糟糕的设计而不是规范化的问题。 < P>如果您使用Oracle 9i,您可以在表中存储地址对象。这将消除对地址格式的(合理的)担忧。这并不是我所理解的标准化。您似乎不是在谈论消除冗余,而是讨论如何对存储或数据模型进行分区。我假设住宿、火车站和机场的地址示例都是不相交的 据我所知,只有当你开始按照这些思路思考时,这才是正常化。邮政编码在功能上取决于街道地址,因此应该在其自己的表中进行分解 在这种情况下,这可能是可取的,也可能是不可取的,这取决于上下文。如果您管理记录并确保其正确性,则可能是可取的;如果用户可以更新自己的记录,则不太可取
一个相关的问题是?如果您有一个对性能非常敏感的项目/功能,在某些情况下,对数据库进行非规范化可能是明智的。但是,由于各种原因,这可能会导致维护问题。您可能希望使用缓存表复制数据,但这也有缺点。这实际上是一个个案基础,但在正常实践中,数据库规范化是一件好事。我看到的99%的非规范化数据库不是设计的,而是开发人员的误解/错误。我同意S.Lott的观点,并想补充: