繁体   English   中英

如何在Postgres 9.3中存储少量关系数据(例如,用户角色)?

[英]How to store a handful of relational data (e.g. user roles) in postgres 9.3?

在postgres 9.3中存储少量关系数据的最佳方法是什么?

  • 例如,每个用户具有哪些角色(编辑,发布者,管理员,查看者,贡献者)
  • 例如,应用程序可读的文件扩展名(pdf,txt,epub,rtf)

通常,这会像...

CREATE TABLE users (
id SERIAL,
...
);

CREATE TABLE roles (
id SERIAL,
name VARCHAR(50), -- editor, publisher ...
description VARCHAR(50) -- ideally, UI display would be different than database codename, e.g. "Administrator" for "admin"
);

CREATE TABLE user_roles (
user_id int,
role_id int,
...
PRIMARY KEY (user_id, role_id)
);

要求是

  • 实体(例如,用户)可以分配0、1或N个项目(例如,角色),其中N <20
  • 数据必须能够快速过滤(例如,选择所有具有role = publisher的用户)

考虑到N <20,是否存在一种替代的,有效的,更容易使用的存储方式? (也许是数组还是json?)如果是这样,那么模式定义,INSERT和上面的SELECT查询将如何?

根据我的个人经验,没有更好的方法来存储它。 这就是建立关系数据库引擎的目的。

我也总是想使用PostgreSQL的所有很酷的功能,但是在仔细分析之后,旧的方法通常仍然是最好的。

连接三个表可能很不方便,但是使用JSON,XML或数组,查询也会变得困难和混乱。 而且它们通常慢很多,因为它们不能使用索引以及简单的选择和联接。

如果联接确实困扰您,则可以使用视图,但是我怀疑它会带来很大的不同。

当使用诸如postgres之类的RDBMS时,您希望数据存储在关系中。 这就是它的设计目的。 数组和JSON打破了这一点,使数据处理更加困难。 如果此信息对于存储在数据库中足够重要,则应设计表以正确存储它。

你可能想也读这个 从根本上讲,这是一个决定将关系数据存储在nosql数据库中并感到遗憾的人的故事。 同样的想法适用于以非关系db格式存储关系数据(例如将json放在列中)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM