[我正在尝试为豪华轿车公司建立数据库,但我陷入了与客户,驾驶员,关联公司和订单相关的地址应该进行多少标准化的问题。
基本上,会员和驱动程序地址如下所示: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
这些只是示例,因此无需花费大量时间来理解它们。
我应该使用多少个地址表来创建良好的规范化数据库?
此刻,我在脑海中想到了三个想法:
一个地址表,其中包括所有字段,外加一个描述地址类型(客户,订单,会员,驱动程序)的表。不太喜欢这个。
两个地址表。一个与司机和关联公司,另一个与客户和订单。对于第二个表,我将拥有and字段,对于客户而言,该字段始终为NULL。也不喜欢这个。
三个地址表。一种用于驾驶员和会员,一种用于客户,一种用于订单。没有未使用的字段使我认为这可能是比其他两个更好的选择。
有人对这三个选项有没有建议,甚至可能是更好的选择?
非常感谢。
更新:
现在不用担心表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的字段或也可以用于字段)。
我也不喜欢此选项,因为我将需要执行两个查询才能仅检索订单记录的信息。首先,我将检索订单信息,在知道了接送服务的类型(机场或地址)之后,我将执行另一个查询以检索特定的接送服务。
所以,再次...我在做什么错?我想念什么吗?
是的,我一定会使用一些验证系统来确保地址正确。
我正在尝试为豪华轿车公司建立数据库,但我陷入了与客户,驾驶员,会员和订单相关的地址应该进行多少标准化的问题。基本上是...
[现在可能为时已晚,但我建议使用1个Addresses
表(address_id
,address_line_1
,address_line_2
,city
,state
,zipcode
,country
,address_type
( FK到AddressTypes
表)),因为这将遵循标准归一化规则。您的Orders
表将与Addresses
表具有两个外键关系-pickup_address_id
和delivery_address_id
。我对Customers
,Drivers
和Affiliates
表的设计有疑问,但是如果没有更好地了解它们之间的确切关系,就很难制定解决方案。
我实际上是在SmartyStreets从事地址验证行业的,其中处理和存储地址是我们的专业领域。根据我的经验,我看到了许多与您一样的情况。