我一直试图解决这个错误几分钟,但我不知道我在表定义中缺少什么。
表格的代码如下:
表public static main(String[] args) {
B observer = new B();
Visualisation v = new Visualisation(observer);
}
:
Autocare
表CREATE TABLE [dbo].[Autocare]
(
[IDAutocar] NUMERIC (18, 0) NOT NULL,
[IDTipAutocar] NUMERIC (18, 0) NOT NULL,
PRIMARY KEY CLUSTERED ([IDAutocar] ASC, [IDTipAutocar] ASC),
CONSTRAINT [FK_Autogari_TipAutocar]
FOREIGN KEY ([IDTipAutocar])
REFERENCES [dbo].[TipAutocar] ([IDTipAutocar])
);
:
Curse
当我尝试执行第二个脚本时,我得到以下错误(我知道是与表之间的关系有关的东西),我不知道问题可能在哪里。我是C#和SQL Server的新手,所以如果我问了一个愚蠢的问题,请原谅。
Msg 1776,Level 16,State 0,Line 1
引用的表'Autocare'中没有主键或候选键与外键'FK_Curse_Autocare'中的引用列列表匹配。Msg 1750,Level 16,State 0,Line 1
无法创建约束。查看以前的错误。
答案 0 :(得分:1)
外键必须引用唯一键,无论是否为主键。在您当前提供的DDL中,Autocare
中的唯一标识符(主键)是IDAutocar
和IDTipAutocar
的组合。另一方面,您Curse
引用Autocare.IDAutocar
,这不是唯一的。
您可以将IDTipAutocar
添加到Curse
(及其外键定义):
CREATE TABLE [dbo].[Curse] (
[IDCursa] NUMERIC (18, 0) NOT NULL PRIMARY KEY,
[IDTraseu] NUMERIC (18, 0) NOT NULL,
[Data] TIMESTAMP NOT NULL,
[IDCompanie] NUMERIC (18, 0) NOT NULL,
[NrLocuri] NUMERIC (18, 0) NOT NULL,
[IDAutocar] NUMERIC (18, 0) NOT NULL,
[IDTipAutocar] NUMERIC (18, 0) NOT NULL,
CONSTRAINT [FK_Curse_Trasee]
FOREIGN KEY ([IDTraseu])
REFERENCES [Trasee]([IDTraseu]),
CONSTRAINT [FK_Curse_Companii]
FOREIGN KEY ([IDCompanie])
REFERENCES [Companii]([IDCompanie]),
CONSTRAINT [FK_Curse_Autocare]
FOREIGN KEY ([IDAutocar], [IDTipAutocar])
REFERENCES [Autocare]([IDAutocar], [IDTipAutocar])
)
或者,您可以从IDTipAutocar
的主键定义中删除Autocare
:
CREATE TABLE [dbo].[Autocare]
(
[IDAutocar] NUMERIC (18, 0) NOT NULL,
[IDTipAutocar] NUMERIC (18, 0) NOT NULL,
PRIMARY KEY CLUSTERED ([IDAutocar] ASC),
CONSTRAINT [FK_Autogari_TipAutocar]
FOREIGN KEY ([IDTipAutocar])
REFERENCES [dbo].[TipAutocar] ([IDTipAutocar])
);
从您的业务逻辑角度来看,这更有意义。