2016-06-16 8 views
0

У меня есть таблица арендодателя и таблица листинга. при создании моей таблицы листинга я получил эту ошибку.Ошибка при отправке PostgreSQL

ERROR: there is no unique constraint matching given keys for referenced table "t_property_landlord" 
SQL state: 42830 

create table if not exists t_listing(
    rental_listing_id BIGSERIAL primary key, 
    landlord_id BIGSERIAL references t_property_landlord(landlord_id), 
    available varchar(25), 
    rent numeric, 
    deposit numeric, 
    description text, 
    term varchar(25), 
    pet boolean, 
    feature JSON, 
    post_ts date, 
    view numeric, 
    create_ts timestamp default now() 
); 

Адрес земельного участка.

create table if not exists t_property_landlord(
    landlord_id BIGSERIAL, 
    email varchar(100) references t_user(email), 
    property_id BIGSERIAL references t_property(property_id), 
    change_ts timestamp default now(), 
    active boolean default true, 
    primary key(email,property_id) 
); 

Я попытался создать create_ts, и ссылки на landlord_id, что делает вас уникальным тем, но до сих пор не работает. Может кто-то взглянуть и сообщить мне, что я делаю неправильно? Я использую PostgreSQL 9.4

спасибо,

+0

'landlord_id BIGSERIAL ссылки t_property_landlord (landlord_id),' - >> 'landlord_id BIGINT ссылки t_property_landlord (landlord_id),' (и то же самое для 'property_id') – wildplasser

+0

bigserial auto-increments. вы не хотите использовать это для своих внешних ключей. только родительская запись, на которую фактически указывают внешние ключи. –

ответ

1

t_property_landlord.landlord_id не является уникальным столбец. Для иностранного ключа необходимо иметь возможность ссылаться на него. Смотрите здесь для получения информации о том, как объявить одно: https://www.postgresql.org/docs/8.1/static/ddl-constraints.html

Ваш t_property_landlord стол должен выглядеть следующим образом:

create table if not exists t_property_landlord(
    landlord_id BIGSERIAL UNIQUE NOT NULL, 
    email varchar(100) references t_user(email), 
    property_id BIGSERIAL references t_property(property_id), 
    change_ts timestamp default now(), 
    active boolean default true, 
    primary key(email,property_id) 
); 

В конце концов, вы, возможно, захотите еще раз взглянуть на ваш дизайн, как вы пытаетесь сделайте ссылку внешнего ключа на столбец в другой таблице, которая не является основным ключом этой таблицы. Обычно внешние ключи должны ссылаться на первичные ключи.

+0

oh wow, я думал, что BIGSERIAL похожа на номер авто номера авто и уникальна. Большое вам спасибо – chungtinhlakho

+0

Добро пожаловать. Рад помочь. –

Смежные вопросы