Это может сделать то, что вы хотите:
CREATE TABLE countries (
name VARCHAR PRIMARY KEY,
...
);
CREATE TABLE weekdays (
name VARCHAR PRIMARY KEY,
...
);
CREATE VIEW tags AS
(SELECT name AS tag, 'countries' AS source
FROM countries)
UNION ALL
(SELECT name AS weekdays, 'weekdays' AS source
FROM weekdays)
UNION ALL ...;
Затем вы можете создать дополнительные таблицы и добавить их в представление.Когда вы помечаете какую-либо другую таблицу, вы будете рассматривать имя и источник тега как первичный ключ и обращаться к этому представлению, например, так:
CREATE TABLE foo (
id SERIAL PRIMARY KEY,
...
);
CREATE TABLE foo_tags (
foo_id INTEGER REFERENCES foo,
tag_name VARCHAR,
tag_source VARCHAR
);
К сожалению, невозможно определитьвнешний ключ из таблицы foo_tags
для вида tags
, определенного выше.