我正在创建一个论坛类型的web应用程序,用户可以根据特定主题发表评论。有注册和登录步骤。现在,当用户帐户被删除时,与该用户相关的所有内容也会被删除,例如评论。
有没有办法保留用户生成的评论,但删除用户帐户?并将用户名替换为“deleted”?我要简单地删除吗 ON DELETE CASCADE
在创建 comments
table?
CREATE TABLE users (
id INTEGER PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
username TEXT NOT NULL UNIQUE,
nickname TEXT NOT NULL UNIQUE,
password TEXT NOT NULL,
date_created TIMESTAMPTZ DEFAULT now() NOT NULL
);
CREATE TABLE comments (
id INTEGER PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
comment TEXT NOT NULL,
date_created TIMESTAMPTZ DEFAULT now() NOT NULL,
date_modified TIMESTAMPTZ DEFAULT now() NOT NULL,
vinmake_id INTEGER
REFERENCES vinmake(id) ON DELETE CASCADE,
dtc_id INTEGER
REFERENCES dtc(id) ON DELETE CASCADE NOT NULL,
user_id INTEGER
REFERENCES users(id) ON DELETE CASCADE NOT NULL
)
谢谢您。
1条答案
按热度按时间pxq42qpu1#
一种选择是将外键定义更改为
on delete set null
而不是on delete cascade
-这也需要制作列null
有能力(目前没有):如文档中所述,删除引用行时,此选项会将引用行中的引用列设置为空[…]。
旁注:一般来说,我不建议从引用表中删除用户。相反,您可以在表中有另一列
users
表示用户已被删除(例如,一个名为active
),并且可以在查询中用作筛选器。这在某些方面更安全,并且避免了以后需要使用外键。