2016-04-26 20 views
1

私は次のように別のテーブルのBANK_CARDに関連付けられているテーブルBILLガット:矛盾NULL/NOT NULL宣言「法案」

create table BILL (
    id_bill    BIGSERIAL   not null, 
    id_bank_card   BIGSERIAL   null, 
    id_registred_user BIGSERIAL   not null, 
    reference_number  INT4     null, 
    purchase_date  DATE     null, 
    bill_status   VARCHAR(50)   null, 
    payment_method  VARCHAR(50)   null, 
    constraint PK_BILL primary key (id_bill) 
); 

create table BANK_CARD (
    id_bank_card   BIGSERIAL   not null, 
    id_registred_user BIGSERIAL   not null, 
    card_type   VARCHAR(50)   null, 
    card_number   INT4     null, 
    expiring_date  DATE     null, 
    cipher    INT4     null, 
    constraint PK_BANK_CARD primary key (id_bank_card) 
); 

テーブルBILLは0..1を持っていますテーブルBANK_CARDとの関連付け、およびBANK_CARDにはテーブルBILLとの1..nの関連付けがあります。

しかし、私は私のSQLスクリプトを実行したとき、私は次のエラーを取得する:

conflicting NULL/NOT NULL declarations for column "id_bank_card" of table "bill" 

関係BILLとBANK_CARDは外部キーid_bank_cardがテーブル法案にnullを指定でき0..1あるので、私ドンのでなぜこのエラーが出るのか理解できません。

お願いします。おかげさまで

+0

なぜ2つのシリアルが1つのテーブルにありますか?なぜあなたは3つのシリアルを1つのテーブルに持っていますか? – joop

答えて

2

プライマリキーと外部キーのデータ型定義が混乱しています。 A bigserialは、bigintタイプの値の生成器である。外部キーは、そのデータ型を使用する必要があります。下記の表の定義を参照してください。また、デフォルトの動作であるので、NULL句の使用は冗長です。主キーはNULLにはできませんので、NOT NULLも冗長です。

create table bank_card (
    id_bank_card   bigserial, 
    id_registred_user bigint references <user table>, 
    card_type   VARCHAR(50), 
    card_number   INT4, 
    expiring_date  DATE, 
    cipher    INT4, 
    constraint PK_BANK_CARD primary key (id_bank_card) 
); 

create table bill (
    id_bill    BIGSERIAL, 
    id_bank_card   bigint references bank_card, 
    id_registred_user bigint references <user table>, 
    reference_number  INT4, 
    purchase_date  DATE, 
    bill_status   VARCHAR(50), 
    payment_method  VARCHAR(50), 
    constraint pk_bill primary key (id_bill) 
); 
+0

私のために働いたあなたの答えをありがとう! –