Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
外键的SQL外键_Sql_Db2 - Fatal编程技术网

外键的SQL外键

外键的SQL外键,sql,db2,Sql,Db2,首先,我正在使用DB2 我的问题是: 我有一个带有主键的表a 带有两个主键的表B(其中一个是A的外键) 带有主键的表C 表D,其主键为B和C 如何创建表D 我的第一个想法是,但它不起作用: Create Table D( A varchar(20) not null references B(A), B varchar(20) not null references B(name of prim key attribute from B), C varchar(20) no

首先,我正在使用DB2

我的问题是:

  • 我有一个带有主键的表
    a
  • 带有两个主键的表
    B
    (其中一个是
    A
    的外键)
  • 带有主键的表
    C
  • D
    ,其主键为
    B
    C
如何创建表
D

我的第一个想法是,但它不起作用:

Create Table D(
   A varchar(20) not null references B(A),
   B varchar(20) not null references B(name of prim key attribute from B),
   C varchar(20) not null references C,
   primary key(A,B,C)    
);

希望您理解我的问题并能帮助我。

正如Marc_的评论,一个表中只能有一个主键,即一个表中不能有多个主键


作为问题的解决方案,您可能可以组合表B和表C的两列,它们可以一起作为表D的主键。外键引用列的名称,而不是约束的名称

设置

create table A (
  col_a int primary key
);

create table B (
  col_a int not null,
  col_b int not null,
  primary key (col_a, col_b),
  foreign key (col_a) references A (col_a)
);

create table C (
  col_c int primary key
);
还有死刑

create table D (
  col_a int not null,
  col_b int not null,
  col_c int not null,
  primary key (col_a, col_b, col_c),
  foreign key (col_a, col_b) references B (col_a, col_b),
  foreign key (col_c) references C (col_c)
);

一个表只能有一个主键-您可能的意思是由两列组成的主键,或者您的意思是表B有两个单独的列,每个列本身都是唯一的?也许将它们组合为一个复合键没有必要或意义?谢谢。这正是我搜索的内容=)