gpt4 book ai didi

database-design - 地址的数据库规范化

转载 作者:行者123 更新时间:2023-12-04 06:53:07 25 4
gpt4 key购买 nike

我正在尝试为豪华轿车公司建立数据库,但我对与客户,司机,关联公司和订单相关的地址应该做多少标准化工作感到困惑。

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

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

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

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

客户编号-10,000-99,999

订单ID-100,000-无限制

驱动程序ID-A1-A999(可能)

会员编号-1,000-9,999

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

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

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


一个包含所有字段的地址表,外加一个描述地址类型(客户,订单,会员,驱动程序)的表。不太喜欢这个。
两个地址表。一个带司机和会员,一个带客户和订单。对于第二个表,我将拥有and字段,对于客户而言,该字段始终为NULL。也不喜欢这个。
三个地址表。一种用于驾驶员和会员,一种用于客户,一种用于订单。没有未使用的字段使我认为这可能是比其他两个更好的选择。


有没有人对这三种选择甚至更好的选择有任何建议?

非常感谢。

更新:

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

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

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

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

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

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

选项:
订单表

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

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

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

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

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

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

最佳答案

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

最初,我会根据您的记录类型来关注您的细分ID号。如果四种类型的记录(客户,驾驶员,关联公司,订单)存储在不同的表中,为什么需要ID范围限制? (更新:这实际上不是主要问题……)

现在,介绍一下数据库设计。理想情况下,您的设计应该反映核心域的操作(即,协调客户,订单,驱动程序等),而不是仅与地址数据耦合。地址可能很重要,但它们并不是您业务的核心业务。因此,根据我从您的原始帖子中收集的信息,我会立即犹豫将地址与实际记录分开存储。

尽管您在每个表中都有相似的字段,但是它们代表了不同的业务目的,并且您不会冒未用的,不必要的字段的风险。因此,问题不仅仅在于“我要创建多少个地址表”,而是什至只为地址创建任何表的问题。

尽管地址具有多种形式和形式,但对于豪华轿车公司来说,正确的地址信息以及规范化数据库很重要。 USPS(我假设您基于美国)证明某些供应商可以提供地址标准化服务。这称为CASS™认证。通过CASS™服务运行每个地址,您就完成了。这些地址看起来一样,具有完整的信息,并且也可以交付。我建议您用LiveAddress之类的东西开始搜索,它会在输入点验证地址,或者是CASS list scrubbing service这将立即验证一批地址(并警告您重复)。

更新:如果一个客户可能有多个地址,那么可以,我主张为此使用单独的表。但是,您仍然需要使用CASS对其进行标准化/验证,因此,如果需要,可以稍后取出重复项(此外,您将知道地址实际存在)。

因此,除此以外,请考虑将每个地址内联存储在与其关联的实际记录中(而不是在单独的表中)。

如有其他疑问或指示,我可以亲自提供帮助。

更新

关于从机场分隔地址:根据您的业务需求,这可能是有效的区分,但请记住,机场也有地址。您可以在表中添加一个字段来存储公司名称或地址指向的位置,例如“奥黑尔国际机场”。这可以巩固一些领域。另外,我建议您按组件(街道,城市,州,邮政编码等)将地址存储在单独的字段中。

关于database-design - 地址的数据库规范化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9243177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com