Каков наилучший способ разработки базы данных с продуктом нескольких вариаций? - PullRequest
1 голос
/ 24 марта 2012

Этот вопрос относится к этому вопросу: Лучший способ хранить цвета товаров в базе данных

Итак, у меня есть продукт, который имеет несколько свойств. Ниже приведена иллюстрация.

Продукт A

Name: Product A v1.0, Product A v2.0 (2 versions of Product A)
Color: Black, White, Blue
Capacity: 16MB, 32MB, 64MB
Carrier: T-Mobile, Digicel, Vonage

Этот продукт может иметь только одно свойство. Пример: Black 32MB, продукт Vonage A v2.0

Я не уверен, как настроить этот продукт в нормализованной базе данных. Нужно ли создавать отдельные таблицы для «Имя продукта», «Цвет», «Емкость» и «Носитель», а затем создавать таблицу связи между «Продуктом A v1.0» и «Цветом», «Продуктом A v1.0» и «Емкостью», «Продуктом А1.0» и «Перевозчиком» и т. Д.

Я также не уверен, потому что Продукт A v1.0 предлагает только 16 МБ черного / белого, в то время как v2.0 предлагает все цвета, все емкости и только одну сотовую несущую. И я мог бы продолжить с другими незначительными изменениями.

1 Ответ

6 голосов
/ 24 марта 2012

Вот пример того, как я бы связал продукт и цвета в Oracle (обновлен, чтобы показать, как вы можете создать первичный ключ для продуктов с отдельным уникальным ключом):

CREATE TABLE product_color (
    color_name VARCHAR2(100),
    CONSTRAINT color_pk PRIMARY KEY (color_name)
);

CREATE TABLE product (
    product_id NUMBER,
    product_name VARCHAR2(100),
    color_name VARCHAR2(100),
    CONSTRAINT product_pk PRIMARY KEY (product_id),
    CONSTRAINT color_fk FOREIGN KEY (color_name) 
        REFERENCES product_color (color_name),
    CONSTRAINT product_uk UNIQUE (product_name, color_name)
);

Это в основном создает внешнийключ к таблице значений.Если вы попытаетесь вставить цвет или недопустимый текст, отсутствующий в таблице product_color, ограничение предотвратит это.

Теперь я мог бы еще больше нормализовать это, связать целочисленный ключ с каждым цветом и создать внешний ключ.в целое число.Однако этот тип нормализации приведет к множеству объединений в ваших операторах SQL, особенно когда вы начнете добавлять дополнительные атрибуты.Я считаю этот способ хорошим компромиссом с более чистым SQL.

...