2016-04-26 3 views
1

I Got таблицу ЗАКОНОПРОЕКТ, которая связана с другой таблицы BANK_CARD следующим образом:конфликтующие NULL/NOT NULL объявления для столбца "id_bank_card" таблицы "счета"

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 имеет 1..n связь с таблицей BILL.

Но когда я исполняю мой SQL скрипт я получаю следующее сообщение об ошибке:

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

Поскольку БИЛЛ отношения и BANK_CARD является 0..1 внешним ключом id_bank_card может быть пустым в счете таблицы, поэтому я дон Не понимаю, почему я получаю эту ошибку.

Любая помощь пожалуйста? Спасибо.

+0

Почему у вас есть ДВА сериалов в одном столе? Почему у вас есть три сериала в одной таблице? – 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

Спасибо за ваш ответ, который сработал для меня! –