Задать вопрос
@Avasov

Как организовать ограничение для записи по внешнему ключу?

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

Есть одна таблица которая хранит всех производителей, независимо от того какую именно технику они производят
manufacture (
  id serial primary key,
  name varchar (255) UNIQUE NOT NULL
)


Есть таблицы, которые ограничивают выбор производителей в зависимости от категории
processor_manufacture(
  id serial primary key,
  manufacture_id int REFERENCES manufacture (id) NOT NULL --по внешнему ключу добавляю Intel и AMD
)


Далее таблицы с характеристиками определенных видов товаров, в которых есть столбец внешнего ключа производителя
processor_characteristic (
  id serial primary key,
  processor_manufacture_id int REFERENCES processor_manufacture (id) NOT NULL,
  total_cores int NOT NULL --и прочие другие характеристики
)

Нормальное ли данное решение, или есть решения по лучше?
  • Вопрос задан
  • 117 просмотров
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
@NevermindWano
PHP Разработчик
Вы пропустили поле name с конкретными моделями в processor_manufacture. Intel засунем в manufacture, если правильно понял, а куда положим конкретный проц? I5, I9 и тд.?
Но я бы сделал вот такую схему:

spoiler
63a3140934c9c696438881.png


Все таки не лучшая идея под каждый тип товара создавать свою таблицу. Тип товара (проц, ssd, и тд )укажем в таблице type_manufacture. Схема очень упрощенная, просто для примера.
Ответ написан
Vindicar
@Vindicar
RTFM!
Я бы сделал связную таблицу ПроизводительТипа(id_типа, id_производителя), и заставил бы товар ссылаться на эту таблицу по композитному внешнему ключу, вместо того чтобы ссылаться напрямую на тип и производителя.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы