@holllop

Как сделать внешний ключ?

Две таблицы. Таблица А, в ней два столбца customer_id и customer, где id это serial, а во втором столбце ФИО заказчика. Есть таблица Б, в ней тоже два столбца n_order и customer_id, где n_order эо serial, а во втором интовые значения. Идея была какая что один заказчик(customer) может сделать несколько заказов(order). То есть отношение один ко многим наверное хотя заказчиков ведь тоже не один так что получается многие ко многим. И для реализации своей идеи я сначала решил что нужно сделать
alter table B ADD FOREIGN KEY (customer_id) REFERENCES A(customer_id) ;

но потом подумал что это не правильно, т.к. номер заказа не может быть в родительской таблице. И переделал в
alter table A ADD FOREIGN KEY (customer_id) REFERENCES B(customer_id) ;

и получил ошибку
в целевой внешней таблице "A" нет ограничения уникальности, соответствующего данным ключам

И в добавок запутался какая таблица родительская, а какая дочерняя.
  • Вопрос задан
  • 317 просмотров
Решения вопроса 2
Давайте для начала переведём это на привычные всем названия.
У вас таблица customers (А) со столбцами id и name, а ещё таблица orders (Б) со столбцами id и customer_id.

Таблица orders имеет внешнюю (по отношению к ней) связь: orders.customer_id -> customers.id. Таблица customers здесь выступает в качестве основной, поскольку именно она отвечает за то, какие id для orders.customer_id будут валидными, а какие нет. Т.е. "родительская" таблица это та, в которой хранятся "условия проверки" корректности значения в "дочерней".

В тексте вопроса же у вас, простите, какой-то винегрет из слов.
но потом подумал что это не правильно, т.к. номер заказа не может быть в родительской таблице
Вот это, например, вообще не имеет смысла, потому что никакого номера заказа тут и нет.
Ответ написан
rozhnev
@rozhnev
Fullstack programmer, DBA, медленно, дорого
Поле id в таблице customers ДОЛЖНО БЫТЬ первичным ключем
create table customers (
    id serial PRIMARY KEY,
    name text
);

create table orders (
    id serial PRIMARY KEY,
    customer_id int
);

alter table orders ADD FOREIGN KEY (customer_id) REFERENCES customers(id) ;


https://sqlize.online/sql/psql14/c1677ae3f75eaec21...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы