Как представить следующую информацию в таблице postgres? - PullRequest
0 голосов
/ 10 мая 2011

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

category, command, options, description
Опции

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

'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'

Поле 'options' имеет несколько типов значений.

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

Ответы [ 3 ]

2 голосов
/ 10 мая 2011

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

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');

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

0 голосов
/ 10 мая 2011

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

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

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

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

0 голосов
/ 10 мая 2011

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

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

...