SQL新手如何建立Orders表OrderNumber与Customers表CustomerNumber的直接关联
问题解答
首先明确结论:你当前的建表代码没有实现要求的两个字段直接关联,同时还存在业务逻辑设计错误,具体问题和修改方案如下:
- 首先是关联缺失的问题:关系型数据库要实现两个表字段的关联,需要在子表(这里是Orders表)中定义外键约束,指向父表(Customers表)的对应主键字段,你的代码里没有写任何外键约束语句,自然无法建立关联。
- 其次是字段设计错误:
- 你把Orders表的
CustomerNumber设为了主键,这不符合业务逻辑——一个客户完全可以下多个订单,这个字段作为主键的话会限制同一个客户只能存在一条订单记录,完全不合理。正常来说Orders表的主键应该是OrderNumber字段才对。 - 你要求关联的是Orders的
OrderNumber和Customers的CustomerNumber,这个关联逻辑本身不符合常规业务逻辑,常规逻辑应该是Orders表的CustomerNumber字段关联Customers表的主键CustomerNumber,表示这个订单属于哪个客户。如果是按照你要求的关联逻辑,相当于一个订单号等于一个客户编号,完全不符合实际使用场景,建议你先确认需求是否描述有误。
- 你把Orders表的
- 如果你是想实现「订单关联对应用户」的常规逻辑,修改后的Orders表建表代码如下:
CREATE TABLE Orders ( OrderNumber VARCHAR(25) PRIMARY KEY NOT NULL, -- 订单号设为主键 CustomerNumber VARCHAR(25) NOT NULL, ProductName VARCHAR(200) NOT NULL UNIQUE, OrderDate DATE NOT NULL, requiredDate DATE NOT NULL, Status VARCHAR(50), -- 定义外键约束建立关联 FOREIGN KEY (CustomerNumber) REFERENCES Customers(CustomerNumber) );
- 如果你确实要实现你描述的「Orders的OrderNumber关联Customers的CustomerNumber」,则代码调整如下:
CREATE TABLE Orders ( OrderNumber VARCHAR(25) PRIMARY KEY NOT NULL, CustomerNumber VARCHAR(25) NOT NULL, ProductName VARCHAR(200) NOT NULL UNIQUE, OrderDate DATE NOT NULL, requiredDate DATE NOT NULL, Status VARCHAR(50), -- 按你要求的字段建立外键关联 FOREIGN KEY (OrderNumber) REFERENCES Customers(CustomerNumber) );
补充提醒:Phone字段用INT类型可能会有问题,比如手机号带前导0、或者国际手机号长度超过INT的存储范围,建议改成VARCHAR类型存储。
内容的提问来源于stack exchange,提问作者user17370698
相关产品推荐
相关产品推荐

