我想知道这是否是一个好的设计。我有许多需要地址信息的表(例如街道、邮政编码/邮政编码、国家/地区、传真、电子邮件)。有时同一个地址会重复多次。例如,可以针对供应商存储地址,然后在发送给他们的每个采购订单上存储地址。然后,供应商可以更改其地址,任何后续采购订单都应具有新地址。它比这更复杂,但这是一个示例要求。
选项1
将所有地址列作为属性放在各个表上。创建采购订单时,将供应商的详细信息复制到采购订单中。可能存储多个副本
选项2
创建一个单独的地址表。拥有从供应商和采购订单表到地址表的外键。仅允许在地址表上插入和删除,因为更新可能会超出您的预期。然后我会有一些计划任务,从地址表中删除不再被任何内容引用的任何行,这样就不会留下未使用的行。也许对地址表中的所有非 pk 列也有一个唯一的约束,以阻止重复。
我倾向于选项2。有更好的方法吗?
编辑:我必须保留采购订单上发送时的地址。另外,它比我建议的要复杂一些,因为可能有送货地址和帐单地址(还有一堆其他包含地址信息的表)。
一段时间后,我会根据日期批量删除旧的采购订单。在此之后,我打算对不再被任何东西引用的任何地址记录进行垃圾收集(否则感觉就像我正在创建泄漏)。
我实际上用它作为我的面试问题之一。以下是一个很好的起点:
Addresses
---------
AddressId (PK)
Street1
... (etc)
and
AddressTypes
------------
AddressTypeId
AddressTypeName
and
UserAddresses (substitute "Company", "Account", whatever for Users)
-------------
UserId
AddressTypeId
AddressId
这样,您的地址完全不知道它们是如何使用的,并且您的实体(用户、帐户)也不直接了解有关地址的任何信息。这完全取决于您创建的链接表(在本例中为 UserAddresses,但您可以执行适合您的模型的任何操作)。
对于可能很大的数据库,有一个有点矛盾的建议:继续将“主”地址直接放在您的实体上(在本例中为“用户”表中)以及“HasMoreAddresses”字段。与仅使用上面的干净设计相比,这似乎很棘手,但可以简化典型用例的编码,并且非规范化可以对性能产生很大的影响。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)