Sql 表格及;关系数据库的PK/FK

Sql 表格及;关系数据库的PK/FK,sql,oracle-sqldeveloper,Sql,Oracle Sqldeveloper,我需要设计一个关系数据库来回答诸如获取特定客户的订单详细信息、查找特定订单的客户详细信息以及检索客户地址等查询 这是我认为我需要做的,但我不是很确定 客户(客户编号(PK)、订单编号*、客户姓名、电话、地址、城市、州、邮政编码、国家) 订单(订单号(主键)、客户号*、产品号、数量、单价、销售代表) 地址(客户编号*(PK)、邮政编码(PK)、地址、城市、州、国家) 我将创建表并将数据插入数据库,我希望这不会是一个问题,但首先我需要弄清楚PK和FK的关系,我将从客户表中删除订单号。使用此FK,客

我需要设计一个关系数据库来回答诸如获取特定客户的订单详细信息、查找特定订单的客户详细信息以及检索客户地址等查询

这是我认为我需要做的,但我不是很确定

客户(客户编号(PK)、订单编号*、客户姓名、电话、地址、城市、州、邮政编码、国家)

订单(订单号(主键)、客户号*、产品号、数量、单价、销售代表)

地址(客户编号*(PK)、邮政编码(PK)、地址、城市、州、国家)


我将创建表并将数据插入数据库,我希望这不会是一个问题,但首先我需要弄清楚PK和FK的关系,我将从客户表中删除订单号。使用此FK,客户只能引用一个订单。相反,请使用Orders表中的FK。这样,任何数量的订单都可以指向特定的客户

类似地,Addresses表应该有一个FK到您的客户,并且在customers表中没有address列。(就我个人而言,我通常更喜欢直接将address列添加到Customers表中。)

另外,为什么在客户和地址表中都有单独的地址列(城市、州等)?你为什么用邮政编码作为FK?这意味着不能有多个客户使用相同的邮政编码

下面是我的方法(假设有一个单独的地址表):

客户:身份证(主键)、姓名、电话
订单:Id(主键)、CustomerId(FK)、ProductId、数量、单价、SalesRep
地址:Id(PK)、客户Id(FK)、地址、城市、州、邮政编码、国家

差不多。 您的订单必须有客户ID、地址ID。 客户不必有OrderID FK.Customer>Orders 1>Many

我不会在主键中包含邮政编码,因为同一客户的同一邮政编码中可能有不同的地址。
您只需为邮政编码创建一个索引即可加快搜索速度。

对于我的数据集,邮政编码唯一地标识了地址和客户号,因为同一邮政编码和客户不存在不同的地址。我怀疑邮政编码是否唯一,但是做你认为正确的事情。我想在customer表中引入order no,这样就不能在customers表中添加orders表中不存在的订单。。也就是说,不可能使用订单号在客户表中为特定客户添加/引用第二个订单?这对我来说毫无意义。如果您仅依赖Orders表中的外键,则保证特定客户的所有订单都在Orders表中。外键向另一个方向移动是没有意义的。感谢您编辑您之前的帖子。现在更简洁了。只是地址表中PK ID的一个小注释。我可以只使用地址列作为主键,因为在名为(地址)ID的数据中没有其他属性。只有地址。我猜你指的是身份证地址?所有的桌子最好都有主键。如果您的地址列是街道,则可能存在重复项。如果添加ID列,可以确保它始终是唯一的。例如,您可以创建一个自动递增的标识,这样您甚至不必设置它的值。我认为这是最佳实践。我不确定是否可以创建一个名为address ID的单独属性。我必须处理给定的数据;)忘记询问为什么在customers表中添加address作为外键?当它引用地址表时,在创建customers表时,我得到一个错误“table doesn exist”。当我在创建addresses表后返回customers表以将address添加为FK时,它会抛出一个错误“missing keyword”:/What's going down?