我正在尝试设置一个数据库结构,用于在应用中存储用户进度。现在我正在使用PostgreSQL存储用户信息和与应用程序相关的其他数据。我不确定如何在用户取得进展时如何构建数据库,即解锁某个级别。我正在考虑创建一个关系数据库,将所有用户作为一行,然后列具有他们可以解锁的所有内容,然后在其中存储true或false值,但这似乎效率很低。有没有更好的方法来存储这些信息?
答案 0 :(得分:0)
我宁愿将成就添加为行,而不是列,例如:
t=# create table achievements (i smallserial primary key, ach text);
CREATE TABLE
t=# create table user_achievements (i serial, user_id int, ach_id smallint references achievements(i), level int, achieved timestamptz default now());
CREATE TABLE
t=# insert into achievements (ach) values('blah');
INSERT 0 1
t=# insert into user_achievements(user_id,ach_id,level) values(1,1,1);
INSERT 0 1
t=# insert into user_achievements(user_id,ach_id,level) values(1,1,2);
INSERT 0 1
t=# select * from user_achievements;
i | user_id | ach_id | level | achieved
---+---------+--------+-------+-------------------------------
1 | 1 | 1 | 1 | 2018-01-29 08:25:32.018466+00
2 | 1 | 1 | 2 | 2018-01-29 08:25:34.089929+00