簡體   English   中英

匿名數據的PostgreSQL數據庫結構/架構

[英]PostgreSQL Database structure/ schema for anonymous data

我希望就如何解決這個問題獲得一些建議,我必須為使用節點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
);

然后,這將在帖子表中填充平均評論數據。 但是我不確定如何保持匿名。

我考慮過分成兩張桌子

  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對帖子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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM