地址的数据库规范化

问题描述 投票:5回答:2

[我正在尝试为豪华轿车公司建立数据库,但我陷入了与客户,驾驶员,关联公司和订单相关的地址应该进行多少标准化的问题。

基本上,会员和驱动程序地址如下所示:address_line_1,address_line_2,城市,州,邮政编码,国家/地区

我的问题来自订单和客户地址。它们应如下所示:address_line_1,address_line_2,城市,州,邮政编码,国家/地区,address_type_1(家庭,公司),address_type_2(接送,送达-仅需要在订单中添加)。

因此,在所有四个表之间,除了两个字段在客户表和订单表中不同之外,我在地址字段中具有相似之处。

我需要提及的是,每条记录都将使用唯一的ID进行标识。示例:

客户ID-10,000-99,999

订单ID-100,000-无限制

驱动程序ID-a1-a999(也许)

会员ID-1,000-9,999

这些只是示例,因此无需花费大量时间来理解它们。

我应该使用多少个地址表来创建良好的规范化数据库?

此刻,我在脑海中想到了三个想法:

  1. 一个地址表,其中包括所有字段,外加一个描述地址类型(客户,订单,会员,驱动程序)的表。不太喜欢这个。

  2. 两个地址表。一个与司机和关联公司,另一个与客户和订单。对于第二个表,我将拥有and字段,对于客户而言,该字段始终为NULL。也不喜欢这个。

  3. 三个地址表。一种用于驾驶员和会员,一种用于客户,一种用于订单。没有未使用的字段使我认为这可能是比其他两个更好的选择。

  4. 有人对这三个选项有没有建议,甚至可能是更好的选择?

非常感谢。

更新:

现在不用担心表ID的编号系统。那只是一个例子。我仍然没有时间找出最好的编号系统。一旦我解决了地址问题,就可以解决。

从马特的答案中,我很想让司机和会员表保留所包含的地址,然后以某种方式对客户表和订单表进行排序。

对于客户,我绝对需要一个Addresses表,因为客户可以将多个地址(家庭,企业1,企业2,喜欢的地方等)存储在我的个人资料中,以便于访问。

我忘了提及订单表,这可能会改变问题的方程式。对于任何订单,我都需要有一个提货和提货地点。但这可以是地址(街道地址)或机场。这意味着与街道地址相关的字段不能与机场特定的字段匹配。因此,我非常确定,在一个表内(全部带有其特定字段)有四个实体(pu_address,pu_airpot,do_address,do_airport)会使我留在未使用的空间中,并且程序混乱。例如:用于接送字段:Address_type,Address_line_1,...,州,国家/地区,机场,航空公司,Flt编号,...并用于与接送相同的东西。

所以我对Order表仍然有问题,我不确定该如何前进。无论是否使用额外的表格,我都需要同时包括地址和机场上落地点。

UPDATE

再次感谢马特。首先,是的,我将地址存储在单独的字段中。对于订单,问题仍然存在。我将举例说明什么类型的pu并使用豪华轿车服务。地址:伊利诺伊州芝加哥市Main Main 123号,邮编60640;机场:ORD,AA,123。我需要将所有这些字段以某种方式集成到表格中。

选项:订单表

order_id,...,需要同时具有机场和地址字段的提取字段,具有机场和地址字段的下车字段。

此选项听起来仍然不正确。

接下来将有两个额外的表。一个用于地址(包括用于识别接送的区域)。另一个将用于机场(具有用于pu的字段或也可以用于字段)。

我也不喜欢此选项,因为我将需要执行两个查询才能仅检索订单记录的信息。首先,我将检索订单信息,在知道了接送服务的类型(机场或地址)之后,我将执行另一个查询以检索特定的接送服务。

所以,再次...我在做什么错?我想念什么吗?

是的,我一定会使用一些验证系统来确保地址正确。

我正在尝试为豪华轿车公司建立数据库,但我陷入了与客户,驾驶员,会员和订单相关的地址应该进行多少标准化的问题。基本上是...

database-design street-address database-normalization
2个回答
4
投票

[现在可能为时已晚,但我建议使用1个Addresses表(address_idaddress_line_1address_line_2citystatezipcodecountryaddress_type( FK到AddressTypes表)),因为这将遵循标准归一化规则。您的Orders表将与Addresses表具有两个外键关系-pickup_address_iddelivery_address_id。我对CustomersDriversAffiliates表的设计有疑问,但是如果没有更好地了解它们之间的确切关系,就很难制定解决方案。


3
投票

我实际上是在SmartyStreets从事地址验证行业的,其中处理和存储地址是我们的专业领域。根据我的经验,我看到了许多与您一样的情况。

© www.soinside.com 2019 - 2024. All rights reserved.