Требовать экспертизы в Руководстве по проектированию БД - PullRequest
0 голосов
/ 03 октября 2018

Мне нужна помощь в разработке определенных таблиц, и я хотел бы знать, правильный ли это подход.

Предположим, у меня есть главная таблица с именем categories, в которой хранится список категорий продуктов.

И еще одна таблица product_categories, которая уже хранит FK с таблицей product.Должны ли мы также иметь FK для категорий?Каковы плюсы и минусы этого.Нужна экспертиза БД здесь.

create table product (
  id int,
  name varchar(255)
);

create table categories (
  id int,
  category varchar(255)
);

create table product_categories(
  id int,
  product_id int,
  category varchar(255)
  FOREIGN KEY (product_id) REFERENCES product (id)
);

Нужно ли нам использовать отношения @ElementCollection или @OneToMany?

1 Ответ

0 голосов
/ 03 октября 2018

Да, вы должны заменить столбец category varchar(255) из product_categories внешним ключом в таблице категорий.В противном случае у вас останется два разных места, где хранится имя категории, что приведет к несоответствиям.

Нужно ли нам использовать отношения @ElementCollection или @OneToMany?

ElementCollection предназначена для коллекций простых или встроенных типов.Не для ассоциаций между сущностями.

OneToMany предназначен для ... ассоциаций один-ко-многим.Но у вас, скорее всего, есть связь «многие ко многим»: товар относится к нескольким категориям, а категория содержит несколько товаров.Так что вам нужно ... ManyToMany.

Если у вас действительно есть связь «один ко многим» (т. Е. Товар принадлежит к одной категории, а категория содержит несколько товаров), то, вероятно, вы не хотитеэта таблица объединения: продукт должен знать категорию, к которой он принадлежит, и поэтому у вас должен быть внешний ключ идентификатора категории в таблице продукта (и двунаправленная ассоциация «один ко многим»).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...