Учитывая, что существует два вида продуктов X и Y. X имеет A, B и C в качестве первичного ключа, тогда как Y имеет A и D в качестве первичного ключа. Должен ли я положить их в одну таблицу? Почему я должен, а если нет, то почему?
В настоящее время я поместил их в две отдельные таблицы, но некоторые коллеги предполагают, что они принадлежат одной и той же таблице. У меня вопрос: стоит ли мне поместить их в одну таблицу или продолжить с другими?
Ниже приведены примеры таблиц для приведенного выше случая.
CREATE TABLE `product_type_b` (
`PRODUCT_CODE` VARCHAR(50) NOT NULL,
`COMPONENT_CODE` VARCHAR(50) NOT NULL,
`GROUP_INDICATOR` VARCHAR(50) NULL DEFAULT NULL,
`RECORD_TIMESTAMP` DATE NULL DEFAULT NULL,
PRIMARY KEY (`PRODUCT_CODE`, `COMPONENT_CODE`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
;
CREATE TABLE `product_type_a` (
`PRODUCT_CODE` VARCHAR(50) NOT NULL,
`CHOICE_OF_COVER` VARCHAR(50) NOT NULL,
`PLAN_TYPE` VARCHAR(50) NOT NULL,
`RECORD_TIMESTAMP` DATE NULL DEFAULT NULL,
`PRODUCT_TENURE` INT(11) NULL DEFAULT NULL,
PRIMARY KEY (`PRODUCT_CODE`, `CHOICE_OF_COVER`, `PLAN_TYPE`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
;
Как видите, есть определенные поля, которые не являются общими для обеих таблиц, но являются частью первичного ключа. Есть также некоторые другие поля, которые не являются общими для обеих таблиц.
Вот общая картина рассматриваемой системы.
- Каждый тип продукта имеет свой источник, из которого он отправляется в систему.
- Нам нужно хранить эти продукты в базе данных.
- Мне бы хотелось иметь баланс между нормализацией и производительностью, чтобы мои скорости чтения-записи не сильно пострадали из-за чрезмерной нормализации.
- Существует также веб-приложение, в котором есть страница, на которой пользователь может выполнять поиск по этим продуктам.
- Пользователь будет заполнять определенные поля столбцов в качестве фильтров, на основе которых нам нужно выбрать продукты и показать их в пользовательском интерфейсе.
- вариации в подтипах в настоящее время равны 2, и ожидается, что они не превысят 4-5, что снова
Может быть, более десяти лет. Это опять-таки приближение.n
Я надеюсь, что это представляет более широкую картину системы.
Я хочу иметь хорошую скорость чтения и записи без особых компромиссов. Так стоит ли мне продолжать этот дизайн? Если нет, какой дизайн должен быть реализован?