Database design 地址的数据库规范化

Database design 地址的数据库规范化,database-design,street-address,database-normalization,Database Design,Street Address,Database Normalization,我正试图为一家豪华轿车公司建立一个数据库,但我陷入了一个难题:对于与客户、司机、附属公司和订单相关的地址,我应该做多少标准化工作 基本上,分支机构和驱动程序地址如下所示: 地址行1,地址行2,城市,州,邮编,国家 我的问题来自订单和客户地址。 它们应该是这样的: 地址\行\ 1、地址\行\ 2、城市、州、邮政编码、国家、地址\类型\ 1(家庭、业务)、地址\类型\ 2(取车、下车-这仅需要包含在订单中) 所以,在所有四个表之间,除了两个在customer和orders表中不同的字段外,我在add

我正试图为一家豪华轿车公司建立一个数据库,但我陷入了一个难题:对于与客户、司机、附属公司和订单相关的地址,我应该做多少标准化工作

基本上,分支机构和驱动程序地址如下所示: 地址行1,地址行2,城市,州,邮编,国家

我的问题来自订单和客户地址。 它们应该是这样的: 地址\行\ 1、地址\行\ 2、城市、州、邮政编码、国家、地址\类型\ 1(家庭、业务)、地址\类型\ 2(取车、下车-这仅需要包含在订单中)

所以,在所有四个表之间,除了两个在customer和orders表中不同的字段外,我在address字段上有相似之处

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

客户ID-10000-99999

订单ID-100000-无限制

驾驶员ID-a1-a999(可能)

附属机构ID-1000-9999

这些只是例子,所以不要花太多时间去理解它们

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

在这一刻,我有三个想法:

  • 一个包含所有字段的地址表,再加上一个描述地址类型(客户、订单、附属公司、司机)的额外地址表。不太像这个

  • 两个地址表。一个是司机和附属公司,一个是客户和订单。对于第二个表,我将使用和字段,对于客户来说,该字段将始终为空。我也不喜欢这个

  • 三个地址表。一个用于司机和附属公司,一个用于客户,一个用于订单。没有未使用的字段使我认为这可能是比其他两个更好的选择

  • 有没有人对这三种选择有什么建议,或者更好的选择

    非常感谢

    更新:

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

    从Matt的回答中,我很想留下包含地址的driver表和affiliate表,然后以某种方式整理客户表和订单表

    对于客户,我肯定需要一个Addresses表,因为客户可以有多个地址(home、business1、business2、favorite places等),我希望将这些地址存储在他们的个人资料中,以便于访问

    我忘了提到订单表,这可能会稍微改变问题的方程式。 对于任何订单,我都需要一个上下车地点。但这可以是地址(街道地址)或机场。这意味着与街道地址相关的字段不能与机场特定字段匹配。因此,我非常确定,在一个表中有四个实体(pu_address、pu_airpot、do_address、do_airport)(都有它们的特定字段)会让我留下未使用的空间和编程混乱。 前任: 取件字段:地址类型、地址行1、…、州、国家、机场、航空公司、航班号、。。。 下车和取车一样

    因此,我仍然有一个订单表的问题,我不知道如何前进。我需要地址和机场接送地点都包括在内,无论是否使用额外的表格

    更新 再次感谢你,马特。首先,是的,我将在单独的字段中存储地址。问题仍然存在于订单中。我将举一个关于什么类型的pu和做一个豪华轿车服务使用的例子。地址:伊利诺伊州芝加哥大街123号,邮编60640;机场:奥德机场,机管局,123。我需要将所有这些字段以某种方式整合到表中

    选项: 订单表

    订单id,…,需要同时包含机场和地址字段的提货字段,同时包含机场和地址字段的卸货字段

    这个选项听起来仍然不对

    下一步是增加两张桌子。一个是地址(包括识别上下车的字段)。另一个是机场(带有pu或do字段)

    我也不喜欢这个选项,因为我需要进行两次查询,以便仅检索订单记录的信息。首先,我将检索订单信息,在我知道上下车类型(机场或地址)之后,我将执行另一个查询来检索特定的上下车信息

    所以,再一次。。。我做错了什么?我错过什么了吗


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

    我实际上在地址验证行业工作,处理和存储地址是我们的专业领域。根据我的经验,我见过很多和你很相似的情况

    我最初关心的是根据记录的类型来划分ID号。如果四种类型的记录(客户、司机、附属公司、订单)存储在不同的表中,为什么需要ID范围限制?(更新:这并不是当前的主要问题……)

    现在,我们来谈谈数据库设计。理想情况下,您的设计应该反映核心域的操作(即,协调客户、订单、驱动程序等),而不只是耦合到地址数据。虽然地址可能很重要,但它们不是您业务的核心运营。基于这一点以及我从你的原始帖子中收集到的信息,我会立即犹豫是否将地址与实际记录分开存储

    虽然每个表中都有相似的字段,但它们代表不同的业务目的,并且不会冒险使用未使用的、不必要的字段。因此,问题不在于“我制作了多少个地址表”,而在于甚至制作任何地址表