0

假设我们正在创建一个系统,我们必须在其中存储建筑物、人员、汽车等的地址。

地址“格式”应类似于:

州(来自州列表)
县(来自县列表)
街道(自由文本,如“第五大道”)
编号(自由文本,例如“克莱斯勒大厦,10 楼,10 号办公室”)

(是的,我不住在美国)

存储该信息的最佳方式是什么:

  • 我应该有一个Person_Address, Car_Address, ...
  • 或者地址信息应该在每个实体的列中,
  • 我们是否可以只有一个地址表并尝试将每一行链接到不同的实体?

还是有另一种“更好”的方式来处理这种情况?
你会怎么做?

4

3 回答 3

1

我已经看到地址存储在地址表中的场景,然后存在多对多链接表,这些链接表存储来自 People 的地址的链接 - 每个表都有一个单独的表,以便可以强制执行外键。有时,链接表存储有关关系的信息,如主要、收货方等。

我还看到了地址存储在客户行中的位置。这会产生有效的收单方、收货方等地址数组,这样就可以了。处理完这两个问题后,我认为我更喜欢将它们放在自己的实体中,它使您可以很容易地保留旧的非活动地址的历史记录。

我们对电话号码使用了相同的技术,人们需要存储不同数量的电话号码。

于 2009-07-27T02:10:43.017 回答
1

我强烈推荐阅读 David C. Hay 的“数据模型模式 - 思想约定”。作者对这个问题进行了深入探讨。
您的设计中有两个广泛的实体。

  1. 地理位置的地址
  2. 居住/属于该地址的人/对象

一般来说,将地址与人或对象的详细信息组合在同一张表中并不是一个好习惯,如下所示

Person(personID, name, gender, addressline1, addressline2)

您的设计中可能有以下实体

Address(number, street, countyID,stateID)
Party(PartyID, Type)
Person(PersonID, name, dob, gender,...,primaryPartyID)
Car(carID, make, model, ...,primaryPartyID)

派对是人/车与地址之间的链接。person 和 Car 表中的 primaryPartyID 是 party 表的外键。这样,您可以在汽车和人之间共享和寻址。如果您想为每个人存储多个地址,您可以在个人和聚会之间添加一个单独的 m:n 表。Party 的类型属性可以采用以下值:“Person”、“Vehicle”等...

于 2009-07-29T08:43:28.393 回答
0

我会说有一个从下拉列表中查找的 AddressType 字段

于 2009-07-27T02:07:28.480 回答