我正在尝试编写2个查询来创建2个表。两者都有:
一个查询:
create table table1
(ID integer NOT NULL IDENTITY(1,1),
Code varchar(50) NOT NULL,
Primary key(ID,Code));
第二个查询:
create table table2
(ID integer NOT NULL IDENTITY(1,1),
Code varchar(50) NOT NULL,
Primary key(ID,Code)
CONSTRAINT fkey FOREIGN KEY (Code) REFERENCES table2(Code));
但是我想让外键只在代码上。 是否有可能,当我尝试时它没有用。 谢谢
答案 0 :(得分:1)
我认为你想要的是:
ID integer NOT NULL IDENTITY(1,1),
Code varchar(50) NOT NULL,
Primary key(ID),
Unique (Code)
也就是说,ID
本身足以识别此表中的行(按定义),而Code
本身就足以识别此表中的行
答案 1 :(得分:1)
我认为你误解了外键是什么。两个表中的主键是ID,如果您希望将代码作为外键,则需要使用代码作为主键的第3个表包含所有代码。
最好使用带有2个字段,id和代码的第3个表,并将此id用作其他2个表中的外键。
你会得到这样的东西:
表1: ID - code_id - field1 - ...
表2: ID - code_id - field1 - ...
表3: ID - 代码
答案 2 :(得分:1)
根据您的编辑,我认为这是您之后的事情吗?
CREATE TABLE table1
(
ID INTEGER NOT NULL
IDENTITY(1, 1) ,
Code VARCHAR(50) NOT NULL ,
PRIMARY KEY ( ID) , --code makes no sense in the Primary Key when ID is
UNIQUE ( code )
);
CREATE TABLE table2
(
ID INTEGER NOT NULL
IDENTITY(1, 1) ,
Code VARCHAR(50) NOT NULL ,
PRIMARY KEY ( ID, Code ) ,
CONSTRAINT fkey FOREIGN KEY ( Code ) REFERENCES table1 ( Code )
);
代码在密钥表中必须是唯一的。
答案 3 :(得分:0)
第一个表中有两列(ID,Code),并将它们作为主键。在第二个表中,您还可以创建一个包含两列(ID,代码)的主键。 外键必须与引用表中的主键具有相同的列数。
在您的查询中,您必须在第二个表中的外键中声明2列,如。
create table table1
(ID integer NOT NULL IDENTITY(1,1),
Code varchar(50) NOT NULL,
Primary key(ID,Code));
--second query:
create table table2
(ID integer NOT NULL IDENTITY(1,1),
Code varchar(50) NOT NULL,
)
ALTER TABLE table2
ADD CONSTRAINT pk_table2_idCode PRIMARY KEY(ID,Code);
ALTER TABLE table2
ADD CONSTRAINT fkey FOREIGN KEY (ID,Code) REFERENCES table1(ID,Code);
现在,如果您只想在代码上使用fk,那么您必须遵循给定的查询
create table table1
(ID integer NOT NULL IDENTITY(1,1),
Code varchar(50) NOT NULL,
Primary key(Code));
--second query:
create table table2
(ID integer NOT NULL IDENTITY(1,1),
Code varchar(50) NOT NULL,
)
ALTER TABLE table2
ADD CONSTRAINT pk_table2_idCode PRIMARY KEY(Code);
ALTER TABLE table2
ADD CONSTRAINT fkey FOREIGN KEY (Code) REFERENCES table1(Code);