Search Postgresql Archives

Temporal data storage

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello,

I have person to group mapping in which I want to store the time, when this
mapping is valid. I can store the valid time in an array or in seperate rows.

in rows:

create table group_mapping (
  group name not null,
  person integer not null,
  valid_since timestamptz not null,
  valid_until timestamptz not null
);

insert into group_mapping values('test', 1, '2000-1-1', '2001-1-1');
insert into group_mapping values('test', 1, '2002-1-1', '2002-1-1');

or in an array:

create type period as (
  since timestamptz,
  "until" timestamptz
);

create table group_mapping_array (
  group name not null,
  person integer not null,
  valid_time period[] not null
);

insert into group_mapping_array values('test', 1,
  array[
    ('2000-1-1', '2001-1-1'),
    ('2002-1-1', '2003-1-1')
  ]::period[]
);

some advantages and disadvantages:

with rows:
+ a gist index already exists (must be modified)
+ can add other attributes to the valid time
- prevent overlapping is very complex
- binary operations like "and", "or" and "not" operates on multiple rows

with array:
+ overlapping can simply done with a constraint and a function
+ binary operations like "and", "or" and "not" are easy to implement
- a gist index must be written nearly from scratch
- adding other attributes is complex

Are there other (dis)advantages I have forgotten?
Which solution is better?
Are there any drawbacks by using arrays in the rows?

Thanks,
  Gerhard

Attachment: signature.asc
Description: Digital signature


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux