簡體   English   中英

如何正確處理 Postgres SQL 數據庫中的刪除

[英]How to properly treat deletions in a Postgres SQL database

我正在努力建立一個 SQL 數據庫來跟蹤鍛煉,但我不確定如何處理刪除。 以下是我的架構中的一些相關表格:

模板模板是一種鍛煉(例如“腿部鍛煉”)

id serial PRIMARY KEY
user_id integer
   REFERENCES User(id)
   NOT NULL
   ON DELETE CASCADE
name varchar(255) NOT NULL
UNIQUE(user_id, name)

運動運動是一種特定的運動(如深蹲)

id serial PRIMARY KEY
user_id
   REFERENCES User(id)
   NOT NULL
   ON DELETE CASCADE
name UNIQUE NOT NULL
UNIQUE(user_id, name)

CompletedWorkout完成的鍛煉就像它聽起來的那樣——某人根據模板完成的鍛煉

id serial PRIMARY KEY
date DATE NOT NULL DEFAULT CURRENT_DATE
template_id integer
    REFERENCES Template(id)
    NOT NULL
comment varchar(1536)

已完成的鍛煉已完成的鍛煉是已完成鍛煉中的特定鍛煉(包括次數和重量)。 例如,5 次 200 磅的深蹲腿日將是一個完整的練習。

id serial PRIMARY KEY
completed_workout_id integer
    REFERENCES CompletedWorkout(id)
    NOT NULL
movement_id integer
    REFERENCES Movement(id)
    NOT NULL
reps integer
weight_lbs integer DEFAULT 0

所以這是我的問題——當有人刪除模板或動作時我該怎么辦?

我仍然希望 CompletedWorkout 表在刪除之前知道模板的名稱。 例如,某人可能會刪除他們的“Leg Workout”模板,但如果他們已經完成了“Leg Workout”,“CompletedWorkout”表中的數據庫記錄應該知道這一點。

我不太確定實現這一目標的正確方法。 由於當前設置刪除Template表內的記錄會在CompletedWorkout表內留下一行,該行具有不存在的template_id

關於正確實施此方法的任何想法? 感謝幫助!

如果你想保留基本信息,你應該做所謂的“軟刪除”:在表中包含一個名為“Active”或“Deleted”的列,並且只更新該列的值。 然后您還必須在各種檢索操作中考慮這個新列。

通常,對於此類數據,您還想知道刪除日期,因此該列可能被命名為“DeletedDate”,其中 NULL 值表示該項目尚未刪除。

暫無
暫無

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

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