Дополнительный столбец SQL или отношение «многие к одному»

0

У меня есть объект Product, и у каждого продукта есть тип, допустим, телефон или ноутбук, поэтому лучше создать объект продукта с типом столбца:

CREATE TABLE product (
    id int PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    type VARCHAR(10) NOT NULL
)

Или создайте таблицу только для типа и создайте отношения "Много в один":

CREATE TABLE product (
    id int PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    type_id INT NOT NULL,
    FOREIGN KEY (type_id) REFERENCES type(id)
)

CREATE TABLE type(
    id int PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(10) NOT NULL,
)
  • 0
    Если у вас есть отношение «один ко многим», то у вас есть две сущности, и подходит таблица соединений.
  • 0
    так что я должен использовать второй метод? какой из них является более логичным и с лучшей производительностью?
Показать ещё 1 комментарий
Теги:

2 ответа

0

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

Причина, по которой второй метод лучше, заключается в том, что он применял типы с правильной зависимостью от внешнего ключа. Таким образом, вам не нужно беспокоиться о том, что одна строка является 'phone' и другим 'Phone'. У вас есть явный список доступных типов.

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

0

Если у ваших продуктов есть только один тип, ничего не выиграть и многого можно рисковать с точки зрения дополнительной, ненужной сложности, введя дополнительные вкладки. Тип должен быть в той же таблице, быть varchar в таблице и перечислять в java с помощью @Enumerated (String) аннотации.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню