我正在设计一个软件,它将使用标签识别类似于StackOverflow的帖子,但有一些差异。
标签必须以dinamically方式加载(如此处),但来自各种不同的表格,因为它将用于识别。
示例:标记Brazil
标识country table
中的国家/地区,标记Monday
标识week day table
中的某一天。
我需要了解如何在数据库中进行设计。如何加载所有表中的标记,但标识数据所属的正确表。
答案 0 :(得分:1)
这可能会做你想要的:
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
。