2011-05-10 8 views
0

我需要存儲的信息具有以下格式如何在postgres表中表示以下信息?

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中表示這些信息的最佳方式是什麼?另外,我應該使用一個表還是多個表?

回答

2

類別,指揮和描述是相當直接的某種類型的「命令」表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

當我設計數據庫模式時,我繪製出我認爲需要的不同表格,然後查看它們的關係。例如,您想查看錶A是否與表B具有1:1或1:多的映射關係。僅用於開始。嘗試在視覺上將其映射出來。這看起來像一個相當簡單的分貝,所以它不會花費很長時間。

然後繪製出您計劃使用的列。確保您可以唯一標識一條記錄。

+0

您有任何具體問題嗎?你對設計有什麼初步想法? – 2011-05-10 15:39:37

0

我不確定我是否理解這個問題,因爲我不認爲您的「代碼」與SQL有任何關係,但無論如何。

對於SetBack,SetTimeSetHour我會使用一個具有適當檢查約束的整數列,以確保只能存儲有效數字。

如果SetFanOptions是單值超出你列出的那些的,我(再次approriate檢查約束)使用一個整數列,以及

如果你可以爲每個風扇多fanOptions(?),你會需要一個到另一個表的一對多關係。