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)
)

これは私の 2 番目のテーブル「顧客」です。

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

これは、上記の 2 つのテーブルに関する私のリレーショナル テーブルです。でもどうして出来ないの?タイプがよく似合います。だからお願い。

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 に通知されます。
  • テーブルの主キーを、2 つの列の複合ではなく、独自の一意の ID に変更しました。通常、これはより良い方法です。
  • 住所テーブルの主キーを郵便番号ではなく address_id に変更しました。そうしないと、2 人の顧客の郵便番号が同じで、その郵便番号内の住所が異なる場合に競合が発生します。
  • 文字列ではなく ID の整数を作成しました。

また、これはすべて、cus_live に除外した (また、address または customer テーブルのいずれにも含めることができない) いくつかの列があることを前提としているため、最初にこの 3 番目のテーブルを持つことを保証することに注意してください。それ以外の場合は、次のように顧客テーブルに 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 に答える