PostgreSQL匿名数据的数据库结构/模式

时间:2017-08-16 23:20:10

标签: sql database postgresql schema create-table

我希望得到一些关于如何处理问题的建议我必须为使用节点js和SQL后端构建的审阅网站构建数据库。对于这个网站,我们希望对一些帖子的不同用户进行10个评论,并获得每个帖子的平均值。唯一的问题是我们希望它保持匿名,因此没有人可以进入表格并编辑或查看结果。数据库的当前架构如下:

CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name VARCHAR(30) NOT NULL,
    email TEXT UNIQUE,
    password TEXT NOT NULL
    admin BOOLEAN
);

CREATE TABLE posts (
    id SERIAL PRIMARY KEY,
    title VARCHAR(250) NOT NULL,
    date DATE NOT NULL,
    avg_review INTEGER
)

因此,从网站上的提交表单中我想将数据添加到表中以收集评论数据,以便可以在上面的帖子表中提供avg_review,以便获得特定帖子的平均评论数据。我的麻烦是使这个匿名,并使每个用户的投票独特。 的更新: 我最初的想法是使用以下内容:

  CREATE TABLE review (
  id SERIAL PRIMARY KEY,
  user_id INTEGER REFERENCES users(id),
  post_id INTEGER REFERENCES posts(id),
  review_value INTEGER
);

然后填充posts表中的平均评论数据。但是我不确定如何保持匿名。

我考虑分成两个表

  CREATE TABLE review (
  id SERIAL PRIMARY KEY,
  post_id INTEGER REFERENCES posts(id),
);

CREATE TABLE votecheck (
  id SERIAL PRIMARY KEY,
  user_id INTEGER REFERENCES users(id),
  post_id INTEGER REFERENCES posts(id),
);

然后,这将记录投票,而不会看到谁完成了投票,并且还注册用户是否已经投票支持帖子以便稍后检查唯一性。

我想知道是否有更好的方法可以做到这一点,因为我觉得按照上次发布的方式进行操作,从长远来看,它不允许编辑值和将来证明它。提前道歉,因为我是SQL数据库的初学者。关于如何更好地处理这个的任何建议表示赞赏。访问级别会更好吗?

1 个答案:

答案 0 :(得分:0)

我不明白为什么它不会允许"编辑价值观以及从长远来看未来的证明"。如果你想隐藏谁投票的东西,但能够检查是否有投票,你可以使用一些哈希。例如,假设用户1在第1和第2个帖子上投票,那么您可以拥有一个表:

create table vote_placed(c uuid pk);

所以当你投票时,你做

insert into vote_placed select md5('1,1')::uuid;
insert into vote_placed select md5('1,2')::uuid;

因此,如果您再次尝试投票,则会因为重复PK而获得异常。

检查用户是否投票,你可以

select true from vote_placed where c = md5('1,1')::uuid

然而只是选择表格不会给你明显的信息谁投票什么...所以你避免这样的情况,一个帖子只有一个人投票,知道你知道谁给了确切的投票 - 当然你可以检查是否有人投票,但你不能确定只有一个人。也可以屏蔽第一个选民,你可以使用随机白噪声预先填写vote_placed表,如md5('manah, manah')::uuid