如何从另一个表设计Tag表?

时间:2011-09-27 17:43:28

标签: database postgresql tags

我正在设计一个软件,它将使用标签识别类似于StackOverflow的帖子,但有一些差异。

标签必须以dinamically方式加载(如此处),但来自各种不同的表格,因为它将用于识别。

示例:标记Brazil标识country table中的国家/地区,标记Monday标识week day table中的某一天。

我需要了解如何在数据库中进行设计。如何加载所有表中的标记,但标识数据所属的正确表。

1 个答案:

答案 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