用于关系数据库的表和PK / FK

时间:2019-04-09 22:41:18

标签: sql oracle-sqldeveloper

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

this is the dataset

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

客户(客户编号(PK),订单编号*,客户名称,电话,地址,城市,州,邮政编码,国家/地区)

订单(Order_no(PK),Cust_no *,Product_no,数量,单价,sales_rep)

地址(客户编号*(PK),邮政编码(PK),地址,城市,州/省,国家/地区)

我将创建表并将数据插入数据库,我希望这不是问题,但首先我需要弄清楚PK和FK的关系

2 个答案:

答案 0 :(得分:2)

我将从 Customer 表中删除Order_no。使用此FK,客户只能参考一个订单。而是在 Orders 表中使用FK。这样,任何数量的订单都可以引用特定客户。

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

此外,为什么在 Customers Addresses 表中都有单独的地址列(城市,州等)?以及为什么要使用邮政编码作为FK?这意味着您拥有相同邮政编码的客户不能超过一个。

这是我的处理方式(假设使用单独的地址表):

  

客户:ID(PK),姓名,电话
  订单:Id(PK),CustomerId(FK),ProductId,数量,单价,SalesRep
  地址:Id(PK),CustomerId(FK),地址,城市,州,邮政编码,国家/地区

答案 1 :(得分:0)

差不多。 您的订单必须具有Customer_ID,Address_ID。 客户不必具有OrderID FK。客户>订单1>很多。

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