【发布时间】:2016-06-08 01:37:58
【问题描述】:
我在将外键组合到不同表时遇到问题。例如我制作了一张表客户和一张表发票。我想要一个从客户到发票的外键,这样我就可以获得客户的姓名和所有信息:
创建Customers的表代码:
Create Table Customers
(
customerID int IDENTITY(100,1) NOT NULL,
customer_email varchar(30) NOT NULL,
username varchar(255) NOT NULL,
password varchar(50) NOT NULL,
firstname varchar(255) NOT NULL,
lastname varchar(255) NOT NULL,
insertion varchar(10) NULL,
phonenumber int NULL,
streetname varchar(20) NOT NULL,
number int NOT NULL,
zipcode varchar(10) NOT NULL,
city varchar(255) NOT NULL,
Constraint pk_Customers
PRIMARY KEY (customerID, customer_email, username)
)
创建Invoices的表代码:
Create Table Invoices
(
invoiceID int IDENTITY(1000,1) NOT NULL,
customer_email varchar(30) NOT NULL,
customerID int NOT NULL,
creationdate datetime NOT NULL DEFAULT GETDATE(),
totalAmount decimal(5,2) NOT NULL,
Constraint pk_Invoices
PRIMARY KEY (invoiceID, customer_email,creationdate)
)
我要使用的外键码:
ALTER Table Invoices
ADD Constraint fk_Customers_Invoices
FOREIGN KEY (customerID) REFERENCES Customers (customerID)
ON UPDATE CASCADE
ON DELETE NO ACTION
它会抛出以下错误:
引用表“客户”中没有与外键“fk_Customers_Invoices”中的引用列列表匹配的主键或候选键。
如何添加我的外键?
【问题讨论】:
-
有点奇怪的结构。如果
CustomerID是identity列,那么为什么PRIMARY KEY中还有其他列?您的两个 PK 都必须通过身份 col。我什至无法想象对 customer_email+creationdate 进行唯一约束的目的是什么...您收到错误消息,因为您的 PK 包含三列,但您尝试仅使用一列来引用它柱子。一列不足以定位由三列标识的记录。如上所述修复你的 PK,FK 就可以正常工作。
标签: sql sql-server foreign-keys