将文件添加到多个表 M:N
Add files to multiple tables M:N
将多个文件添加到多个 table 的最佳数据模型是什么?例如,我有 5 table 篇文章、博客、帖子...对于每个项目,我想存储多个文件。文件 table 仅包含文件路径(不包含物理文件)。
示例:
我正在使用链接 table,但是当我将来创建新的 table 例如 "comments" 时,我需要向链接 [=22] 添加新列=].
是否有更好的方法对此类数据进行建模?
解决这个问题的一种方法是使用 table 继承模式。主要思想是建立一个基础 table(我们称之为 content
),其中包含有关所有项目(例如,创建日期)的一般共享信息,最重要的是,与文件的关系。然后,您可以在将来添加其他内容类型,而不必担心它们与 files
的关系,因为 content
父类型已经处理了它。
例如:
CREATE TABLE flies (
id NUMERIC PRIMARY KEY,
path VARCHAR(100) NOT NULL
);
CREATE TABLE content (
id NUMERIC PRIMARY KEY,
created TIMESTAMP NOT NULL
);
CREATE TABLE links (
file_id NUMERIC NOT NULL REFERENCES files(id),
content_id NUMERIC NOT NULL REFERENCES content(id),
PRIMARY KEY (file_id, content_id)
);
CREATE TABLE articles (
id NUMERIC PRIMARY KEY REFERENCES content(id),
title VARCHAR(400),
subtitle VARCHAR(400)
);
-- etc...
将多个文件添加到多个 table 的最佳数据模型是什么?例如,我有 5 table 篇文章、博客、帖子...对于每个项目,我想存储多个文件。文件 table 仅包含文件路径(不包含物理文件)。
示例:
我正在使用链接 table,但是当我将来创建新的 table 例如 "comments" 时,我需要向链接 [=22] 添加新列=].
是否有更好的方法对此类数据进行建模?
解决这个问题的一种方法是使用 table 继承模式。主要思想是建立一个基础 table(我们称之为 content
),其中包含有关所有项目(例如,创建日期)的一般共享信息,最重要的是,与文件的关系。然后,您可以在将来添加其他内容类型,而不必担心它们与 files
的关系,因为 content
父类型已经处理了它。
例如:
CREATE TABLE flies (
id NUMERIC PRIMARY KEY,
path VARCHAR(100) NOT NULL
);
CREATE TABLE content (
id NUMERIC PRIMARY KEY,
created TIMESTAMP NOT NULL
);
CREATE TABLE links (
file_id NUMERIC NOT NULL REFERENCES files(id),
content_id NUMERIC NOT NULL REFERENCES content(id),
PRIMARY KEY (file_id, content_id)
);
CREATE TABLE articles (
id NUMERIC PRIMARY KEY REFERENCES content(id),
title VARCHAR(400),
subtitle VARCHAR(400)
);
-- etc...