Wydaje się nudne, ale chciałbym utworzyć tabelę dla każdego produktu w sumie.
CREATE TABLE foo (id uuid PRIMARY KEY);
CREATE TABLE bar (id uuid PRIMARY KEY,
s text NOT NULL);
CREATE TABLE baz (id uuid PRIMARY KEY,
a integer NOT NULL,
b integer NOT NULL,
c integer NOT NULL);
Prawdopodobnie chcesz przechowywać niektóre metadane wraz z zapisami każdego typu:
CREATE TABLE envelope (id uuid PRIMARY KEY,
t timestamptz NOT NULL DEFAULT now(),
by text NOT NULL DEFAULT sessions_user);
A to sugeruje ograniczenie klucza obcego:
CREATE TABLE foo (id uuid PRIMARY KEY REFERENCES envelope);
CREATE TABLE bar (id uuid PRIMARY KEY REFERENCES envelope,
s text NOT NULL);
CREATE TABLE baz (id uuid PRIMARY KEY REFERENCES envelope,
a integer NOT NULL,
b integer NOT NULL,
c integer NOT NULL);
A jeśli są jeszcze surowsze cię można sobie wyobrazić przechowywanie kolumny ty
z nazwą typu i użycie jej do skonstruowania złożonego klucza obcego. (Jako opisany pod "Where Not to Use Table Inheritance" na blogu LedgerSMB.)
Czy możesz podać przykład prawdziwych danych, które możesz chcieć przechowywać? – Shnugo
Moim pierwszym pomysłem będzie XML. Możesz przechowywać każdy rodzaj hierarchicznie uporządkowanych danych wraz z opisowymi metadanymi (atrybutami). Ale będziesz potrzebował dużej logiki, aby zinterpretować to ... – Shnugo
@shnugo Jak już wspomniałem, interesuję się relacyjnymi bazami danych. – Halst