Postgresql

數據模型限制每個使用者的行數

  • October 1, 2021

這是關於我被要求創建與使用者有關係的數據模型的 postgres。

例如一個名為 Comment M:1 User 的新數據模型,但在創建數據模型時是否可以設置只能創建 100 條推薦記錄的限制?甚至可能沒有將它們與 PK 連結可能只是一個帶有user_id.

通常如果需要這樣做,我會在 RESTful api 請求中檢查使用者是否已經創建了 100 條評論,但我告訴在數據模型方面進行。我嘗試使用Google搜尋,但可能沒有使用正確的關鍵字,所以在這裡有點迷失,我想確保僅在一個表創建中就可以做到這一點(評論)

提前感謝您的任何建議/意見。

使用TRIGGER是一個很好的方法。此外,值得考慮使用ARRAY來管理您的評論。例如:

DROP TABLE IF EXISTS tb_customers, tb_comments;

CREATE TABLE tb_customers (
 customer_id uuid primary key, 
 username text
);

CREATE TABLE tb_comments (
 customer_id uuid primary key, 
 comment text[]
);

ALTER TABLE tb_comments ADD CONSTRAINT tb_comments_constr01 
 CHECK ( array_length(comment, 1) <= 10); -- LIMIT 10 comment 

INSERT INTO tb_customers VALUES 
 ('53003bcb-3d1e-4955-96c0-272719e9762d', 'username_01'),
 ('07c01749-5ec2-4d38-9b74-15168fe185f5', 'username_02'),
 ('ab68a33d-ddb0-4bc5-af75-a7d17cb9c157', 'username_03');

INSERT INTO tb_comments (customer_id, comment) values ('07c01749-5ec2-4d38-9b74-15168fe185f5', array['$1'])
ON CONFLICT (customer_id) 
DO UPDATE SET comment = array_append(tb_comments.comment, '$1');

INSERT INTO tb_comments (customer_id, comment) values ('ab68a33d-ddb0-4bc5-af75-a7d17cb9c157', array['$2'])
ON CONFLICT (customer_id) 
DO UPDATE SET comment = array_append(tb_comments.comment, '$2');

INSERT INTO tb_comments (customer_id, comment) values ('53003bcb-3d1e-4955-96c0-272719e9762d', array['$3'])
ON CONFLICT (customer_id) 
DO UPDATE SET comment = array_append(tb_comments.comment, '$3');

引用自:https://dba.stackexchange.com/questions/300364