如何在 dependencies [postgresql] 中创建依赖关系
how to create dependencies in dependencies [postgresql]
我目前的数据库架构有问题。
我有这个布局
account
|
likes
|
matche
"i cannot have a match without like and i cannot have likes without account"
所以我的帐户 table:
CREATE TABLE IF NOT EXISTS account(
id SERIAL PRIMARY KEY,
login varchar(17) NOT NULL,
name varchar(50) NOT NULL,
password varchar(60) NOT NULL,
email varchar(255) NOT NULL,
create_at varchar(20) NOT NULL DEFAULT to_char(now(), 'YYYY-MM-DD HH:MM:SS'))
我喜欢table:
CREATE TABLE IF NOT EXISTS likes(
id SERIAL PRIMARY KEY,
liked_by_id_user int NOT NULL REFERENCES account ON DELETE CASCADE,
id_user int NOT NULL REFERENCES account ON DELETE CASCADE,
create_at varchar(20) NOT NULL DEFAULT to_char(now(), 'YYYY-MM-DD HH:MM:SS'))
我的火柴 table :
CREATE TABLE IF NOT EXISTS matche(
id SERIAL, id_user int NOT NULL REFERENCES account ON DELETE CASCADE,
id_other_user int NOT NULL REFERENCES account ON DELETE CASCADE,
id_like_user int NOT NULL REFERENCES likes ON DELETE CASCADE,
id_like_other_user int NOT NULL REFERENCES likes ON DELETE CASCADE,
create_at varchar(20) NOT NULL DEFAULT to_char(now(), 'YYYY-MM-DD HH:MM:SS'))")
"i cannot have a match without like and i cannot have likes without account"
如果一个账号被销毁,他所有的点赞也会被销毁,被点赞的所有配对也会被销毁。如果点赞或链接的账号被销毁,匹配他的也被销毁。
所以我的问题是,如何在我的 table 之间创建完美的依赖关系,因为它们在链中被抑制。
看了postgresql的文档,一路找来找去,没找到方法,谢谢大家的帮助。
首先从最后一个创建语句中删除最后两个符号")
。然后创建 tables 就可以了。但是你会得到这样的依赖关系:
account
| \
likes |
| /
matche
那是因为您在 matche
table.
中引用了 account
table 两次
如果您删除用户,仍然会删除所有喜欢和匹配项,并且在删除喜欢记录时会删除所有匹配项。
只是猜测 - 因为不知道你在追求什么 - 你可以不用列 matche.id_user
和 matche.id_other_user
.
考虑为 likes
和 matches
添加约束,以防止在同一行中出现两次相同的帐户 ID 和相同的点赞 ID。
matche
table目前没有主键
我目前的数据库架构有问题。
我有这个布局
account
|
likes
|
matche
"i cannot have a match without like and i cannot have likes without account"
所以我的帐户 table:
CREATE TABLE IF NOT EXISTS account(
id SERIAL PRIMARY KEY,
login varchar(17) NOT NULL,
name varchar(50) NOT NULL,
password varchar(60) NOT NULL,
email varchar(255) NOT NULL,
create_at varchar(20) NOT NULL DEFAULT to_char(now(), 'YYYY-MM-DD HH:MM:SS'))
我喜欢table:
CREATE TABLE IF NOT EXISTS likes(
id SERIAL PRIMARY KEY,
liked_by_id_user int NOT NULL REFERENCES account ON DELETE CASCADE,
id_user int NOT NULL REFERENCES account ON DELETE CASCADE,
create_at varchar(20) NOT NULL DEFAULT to_char(now(), 'YYYY-MM-DD HH:MM:SS'))
我的火柴 table :
CREATE TABLE IF NOT EXISTS matche(
id SERIAL, id_user int NOT NULL REFERENCES account ON DELETE CASCADE,
id_other_user int NOT NULL REFERENCES account ON DELETE CASCADE,
id_like_user int NOT NULL REFERENCES likes ON DELETE CASCADE,
id_like_other_user int NOT NULL REFERENCES likes ON DELETE CASCADE,
create_at varchar(20) NOT NULL DEFAULT to_char(now(), 'YYYY-MM-DD HH:MM:SS'))")
"i cannot have a match without like and i cannot have likes without account"
如果一个账号被销毁,他所有的点赞也会被销毁,被点赞的所有配对也会被销毁。如果点赞或链接的账号被销毁,匹配他的也被销毁。
所以我的问题是,如何在我的 table 之间创建完美的依赖关系,因为它们在链中被抑制。
看了postgresql的文档,一路找来找去,没找到方法,谢谢大家的帮助。
首先从最后一个创建语句中删除最后两个符号")
。然后创建 tables 就可以了。但是你会得到这样的依赖关系:
account
| \
likes |
| /
matche
那是因为您在 matche
table.
中引用了 account
table 两次
如果您删除用户,仍然会删除所有喜欢和匹配项,并且在删除喜欢记录时会删除所有匹配项。
只是猜测 - 因为不知道你在追求什么 - 你可以不用列 matche.id_user
和 matche.id_other_user
.
考虑为 likes
和 matches
添加约束,以防止在同一行中出现两次相同的帐户 ID 和相同的点赞 ID。
matche
table目前没有主键