Как представить следующую информацию в таблице postgres?

#database-design #postgresql #relational-database

#проектирование базы данных #postgresql #реляционная база данных

Вопрос:

Информация, которую мне нужно сохранить, имеет следующий формат

 category, command, options, description
  

параметры зависят от команд и могут иметь много разных значений.
например

 'SetBack', 'set_fan',  [ (0,ON), (1, OFF), (2, AUTO) ], 'Sets the fan value'
'SetTime', 'set_time', [0-99 Minutes], 'Sets the time value'
'SetHour', 'set_hour', [0-12 Hours], 'Sets the hour value'
'SetFanOptions', 'set_fan_opt', [ (0,'Constant','constant value'), (1, 'Air Mixture', 'Sets Fan Air Mixture'), (2, OFF, 'sets off fan') ... ], 'Sets the Fan Ait Mixture value'
  

поле «параметры» имеет несколько типов значений.

Каким был бы наилучший способ представления этой информации в postgres? Кроме того, должен ли я использовать одну таблицу или несколько таблиц?

Ответ №1:

Категория, команда и описание — довольно простые varchar столбцы для какой-то таблицы «command»:

 create table commands (
    command     varchar not null primary key,
    category    varchar not null,
    description varchar not null  -- Or text if the description will be large.
)
  

И параметры должны иметь свою собственную таблицу:

 create table command_options (
    command varchar not null references commands(command),
    idx     int     not null check (idx >= 0),
    value   varchar not null, -- Not sure if these two column
    label   varchar     null  -- names make sense in your context
)
  

Итак, ваши set_fan параметры будут выглядеть следующим образом в command_options :

 INSERT INTO command_options
(command, idx, value, label)
VALUES
('set_fan', 0, 'ON',   null),
('set_fan', 1, 'OFF',  null),
('set_fan', 2, 'AUTO', null);
  

И set_time примерно так:

 ('set_time', 0, '0-99 Minutes', null)
  

И set_fan_opt :

 ('set_fan_opt', 0, 'Constant',    'constant value'),
('set_fan_opt', 1, 'Air Mixture', 'Sets Fan Air Mixture'),
('set_fan_opt', 2, 'OFF',         'Sets off fan');
  

Я не уверен, в чем разница между «категорией» и «командой» или сколько базе данных нужно знать о параметрах, но, надеюсь, вышесказанное поможет вам начать.

Ответ №2:

Когда я разрабатываю схему базы данных, я отображаю различные таблицы, которые, как я думаю, мне понадобятся, затем смотрю на их взаимосвязь. Например, вы хотите посмотреть, будет ли таблица A иметь сопоставление 1: 1 или 1: много с таблицей B. Просто для начала. Попробуйте визуально отобразить это. Это выглядит как довольно простая база данных, поэтому это не займет много времени.

Затем наметьте столбцы, которые вы планируете использовать. Убедитесь, что вы можете однозначно идентифицировать запись.

Комментарии:

1. У вас есть какие-либо конкретные вопросы? Каковы ваши первоначальные мысли о дизайне?

Ответ №3:

Я не уверен, что понимаю вопрос, потому что я не распознаю ваш «код» как нечто отдаленно связанное с SQL, но в любом случае.

Для SetBack , SetTime и SetHour я бы использовал столбец integer с соответствующими ограничениями проверки, чтобы убедиться, что могут храниться только допустимые числа.

Если SetFanOptions это единственное значение из перечисленных вами, я бы также использовал столбец integer (опять же с соответствующими ограничениями проверки)

Если у вас может быть несколько вариантов FAN для каждого вентилятора (?), вам понадобится отношение «один ко многим» к другой таблице.