0

这是我的第一个表“地址”。

create table address(
street varchar(32) not null,
city varchar(32) not null,
state varchar(32) not null,
zip_code varchar(32) not null,
primary key(zip_code)
)

这是我的第二张表“客户”。

create table customer(
customer_id integer not null,
name varchar(32) not null,
primary key(customer_id)
)

这是我关于上面两个表的关系表。但是为什么我做不到呢?类型匹配得很好。所以,请。

create table cus_live(
customer_id integer not null,
zip_code varchar(32) not null,
primary key(customer_id, zip_code),
foreign key(customer_id) references customer,
foreign key(zip_code) references address
)
4

1 回答 1

1

这是创建外键约束的正确方法:

create table cus_live(
    cus_live_id int not null,
    customer_id int not null,
    address_id int not null,
    primary key(cus_live_id),
    foreign key(customer_id) references customer (customer_id),
    foreign key(address_id) references address (address_id)
)

请注意我所做的更改:

  • 之后references [tableName],在括号中添加键名。这将告诉 SQL 在外键常量中引用了哪一列。
  • 将表的主键更改为它自己的唯一 ID,而不是两列的组合。通常这是更好的做法。
  • 将地址表的主键更改为 address_id 而不是 zipcode。否则,如果两个客户的邮政编码相同,但该邮政编码中的地址不同,您就会发生冲突。
  • 使您的 id 的整数而不是字符串。

另外,请注意,这一切都假设 cus_live 有一些您已排除的其他列(并且不能包含在 address 或 customer 表中),因此首先保证拥有第三个表。否则,您可以像这样将 address_id 放在客户表上:

create table address(
    address_id int not null,
    street varchar(32) not null,
    city varchar(32) not null,
    state varchar(32) not null,
    zip_code varchar(32) not null,
    primary key(address_id)
)

create table customer(
    customer_id int not null,
    name varchar(32) not null,
    address_id int not null,
    primary key(customer_id)
    foreign key(address_id) references address (address_id)
)
于 2013-10-17T17:35:53.097 回答