Cri*_*ian 5 database-design database-normalization street-address
我正在尝试为豪华轿车公司建立数据库,但我对与客户,司机,关联公司和订单相关的地址应该做多少标准化工作感到困惑。
会员和司机的地址基本上是这样的: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的字段或也可以用于字段)。
我也不喜欢这个选项,因为我将需要执行两个查询才能只检索订单记录的信息。首先,我将检索订单信息,在知道了接送服务的类型(机场或地址)之后,我将执行另一个查询以检索特定的接送服务。
所以,再次...我在做什么错?我想念什么吗?
是的,我一定会使用一些验证系统来确保地址正确。
小智 5
现在可能为时已晚,但我建议使用 1 个Addresses表 ( address_id, address_line_1, address_line_2, city, state, zipcode, country, address_type(FK to AddressTypestable)) 因为这将遵循标准规范化规则。您的Orders表将与表有两个外键关系Addresses-pickup_address_id和delivery_address_id。我对Customers,Drivers和Affiliates表的设计有疑问,但如果不能更好地了解它们之间的关系,就很难制定解决方案。
一种选择(但我不知道它是否适合您)是使用一个Parties表 ( party_id, party_type) 来创建超类型/子类型关系(在每种情况下都是一对一或零)Customers,Drivers并且Affiliates,所有这些都是Party. 我建议阅读一两篇 David C. Hay 关于数据建模的文章,以便更好地理解。