У меня есть объект 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,
)
Предполагая, что продукт может иметь несколько типов, правильная взаимосвязь состоит из трех таблиц. В вашем случае у вас есть только один тип.
Причина, по которой второй метод лучше, заключается в том, что он применял типы с правильной зависимостью от внешнего ключа. Таким образом, вам не нужно беспокоиться о том, что одна строка является 'phone'
и другим 'Phone'
. У вас есть явный список доступных типов.
Если это входит в приложение, то такой список еще более важен, потому что он напрямую загружается в элементы пользовательского интерфейса, где вам нужны списки типов, такие как списки выбора.
Если у ваших продуктов есть только один тип, ничего не выиграть и многого можно рисковать с точки зрения дополнительной, ненужной сложности, введя дополнительные вкладки. Тип должен быть в той же таблице, быть varchar в таблице и перечислять в java с помощью @Enumerated (String) аннотации.