Как создать схему базы данных для нескольких раскрывающихся списков нескольких вариантов - PullRequest
0 голосов
/ 28 ноября 2018

Допустим, у вас есть таблица моделей компьютеров, в этих моделях компьютеров могут быть обновлены различные компоненты, такие как ОЗУ, ЦП и хранилище, а различные доступные параметры хранятся в раскрывающихся списках.

Как бы вы это представили вбаза данных?

Я думал об отдельной таблице для каждого типа, такой как:

CREATE TABLE IF NOT EXISTS ram(
    primary_key INTEGER PRIMARY KEY,
    size TEXT NOT NULL,
    price REAL NOT NULL
);

CREATE TABLE IF NOT EXISTS cpu(
    primary_key INTEGER PRIMARY KEY,
    cpu_type TEXT NOT NULL,
    price REAL NOT NULL
);

Но тогда как мне сгруппировать несколько их записей вместе, чтобы создать раскрывающуюся группу?Нужна ли отдельная таблица для каждой опции, в которой хранятся все первичные ключи для одной группы выпадающего списка?Или я могу сгруппировать их в одну таблицу параметров?Или есть лучший способ?

1 Ответ

0 голосов
/ 28 ноября 2018

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

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

Вместо этого создайте таблицу для всех вещей:

create table part (
    id int,
    name varchar(99),
    price real
    -- more columns for attributes that ALL parts have (if any)
)

Поскольку разные детали имеют разные атрибуты, иметь много многостолбцов в этой таблице, большинство из которых не используются.Создайте таблицы для специальных атрибутов:

create table part_attr (
    part_id int references part(id),
    name varchar(99),
    value varchar(99)
    -- possibly other columns
)

Затем используйте код, чтобы объединить все это в выпадающий список и т. Д.

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