2个主键,带1个外键

时间:2014-05-08 10:23:31

标签: sql visual-studio-2012

我正在尝试编写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));

但是我想让外键只在代码上。 是否有可能,当我尝试时它没有用。 谢谢

4 个答案:

答案 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);