【问题标题】:Enforce unique addresses or allow duplicates?强制使用唯一地址还是允许重复?
【发布时间】:2014-05-02 19:12:42
【问题描述】:

我们正在创建一个包含多个将使用邮寄地址的实体的数据库。其中一些实体可以有多个地址,而其他实体只能有一个地址。我们决定将地址集中在一个名为MailingAddress 的表中。示例布局如下所示。

Party         PartyAddresses            MailingAddress         Letter
_____         ______________            ______________         ______
PartyID (PK)  PartyID (FK)              MailingAddressID (PK)  LetterID (PK)
PartyName     MailingAddressID (PK,FK)  StreetAddress          From
                                        City                   To
                                        State                  Subject
                                        ZipCode                MailingAddressID (FK)

我们正在就是否只允许 MailingAddress 表中的唯一地址进行一些争论。例如,如果一方的地址为123 Main St, Anywhere, NY,而一封信的地址为123 Main St, Anywhere, NY,则123 Main St, Anywhere, NY 仅有一条地址记录。

一个论点是,任何给定的地址只有一次会减少地址记录的数量,并且是更好的“形式”。基本上,改进了存储和表大小。

另一个论点是,虽然第一个论点在理论上是合理的,但这种方法的实际缺陷超过了好处。首先,必须围绕唯一性进行编码的性能损失。例如,处理 INSERT 上的唯一约束违规并查询现有记录,或者查询现有记录并在未找到时插入新记录。此外,如果更新记录,则需要重复此过程,因为现有地址需要保持不变,以防被另一个实体使用。其次,编写此代码的风险增加。它增加了引入错误的可能性,该错误会更新和现有地址被另一个实体使用。

根据您的经验,哪个更好?这与规范化有何关系?

编辑:

实际上,我歪曲了 PartyAddresses 表,但在上面进行了更正。它实际上是一个“扩展”表,允许邮寄地址与一方相关。基本上,一个Party可以有多个地址,但在目前的设计中,地址只能属于一个Party。这是否改为多对多关系取决于我原来的问题的答案。

是的,邮寄地址可以更新。信和党之间实际上没有任何关系。我应该解释说它们被系统的两个不同功能使用。该系统中有许多实体需要为其分配地址。为了说明的目的,我在这里包括了两个(信和聚会)。还有更多,但不同实体具有相同地址这一事实并不能使它们在该系统中具有逻辑关联。

【问题讨论】:

    标签: database-design relational-database street-address


    【解决方案1】:

    设计应反映您要开发的应用程序的需求。我需要澄清一些信息:

    我在您的设计中看到 Party - MailingAddress 具有多对多关系:一方可以有多个地址,多方可以有相同的邮寄地址。这是您期望发生的事情吗?

    当您想收到一封信时,您是否关心涉及该信的一方?如果您按照您的描述设计您的数据库,我们无法知道这封信涉及哪一方。

    邮寄地址可以更新吗?或者您仅在创建具有新地址的新方或现有方更改其地址时插入一个新的,并在删除具有该地址的最后一个方时删除一个?如果您计划有时更新邮寄地址,当您查询旧信件时,收到的地址信息也会更改。

    【讨论】:

    • 查看我上面的编辑。你最后的陈述是我试图提出的观点之一。我赞成第二个论点,允许重复地址。我认为在插入新地址之前检查现有地址所涉及的开销以及处理更新地址所需的特殊编码超过了拥有“更清洁”数据的好处。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多