如何在dependencies[postgresql]中创建依赖项
我目前在数据库的体系结构上有一个问题 我有这个布局如何在dependencies[postgresql]中创建依赖项,postgresql,dependencies,Postgresql,Dependencies,我目前在数据库的体系结构上有一个问题 我有这个布局 account | likes | matche “我不能没有喜欢就有比赛,我不能没有理由就有喜欢” 所以我的账户表: CREATE TABLE IF NOT EXISTS account( id SERIAL PRIMARY KEY, login varchar(17) NOT NULL, name varchar(50) NOT NULL, password varchar(60) NOT N
account
|
likes
|
matche
“我不能没有喜欢就有比赛,我不能没有理由就有喜欢”
所以我的账户表:
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'))
我喜欢的桌子:
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'))
我的配对表:
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'))")
“我不能没有喜欢就有比赛,我不能没有理由就有喜欢”
如果一个帐户被销毁,那么他所有的喜欢都会被销毁,并且由喜欢创建的所有匹配都会被销毁。如果同类或其链接的帐户被销毁,匹配他的也被销毁
所以我的问题是,如何在表之间创建完美的依赖关系,因为它们在链中被抑制
我阅读了postgresql文档并一直搜索到,我找不到路,谢谢您的帮助。首先从上一个create语句中删除最后两个符号
”
。然后创建表就可以了。但是您会得到如下所示的依赖关系:
account
| \
likes |
| /
matche
这是因为您在matche
表中引用了account
表两次。但是,如果删除用户,所有喜欢和匹配项都将被删除,删除相似记录时所有匹配项都将被删除 只是猜测-因为不知道你在找什么-你可以不用列
matche.id\u user
和matche.id\u other\u user
考虑向likes
和matches
添加约束,以防止在一行中两次使用相同的帐户id和相同的likes id
matche
表目前没有主键。感谢您的编辑。还有一个问题:请描述这种情况下的“完美依赖”是什么样子。您对级联删除行为满意吗?您是否也希望级联更新?是否要限制某些内容?请详细说明。干杯。无updates和无限制删除即可。谢谢抱歉,看起来像你说的。实际上,我的方案在golang中有一个错误:“pq:insert或update on table“matche”违反外键约束“matche\u id\u user\u fkey”。但是我没有外键这是因为DELETE CASCADE上的行id\u user int NOT NULL REFERENCES account
创建了一个外键约束matche\u id\u user\u fkey
。查看表定义(它是psql中的\d+matche
,或者只是浏览pgAdmin或其他sql工具),您就会找到它。您试图插入account.id
中不存在的值。此时,您应该检查insert语句,或者考虑删除列matche.id\u user
和matche.id\u other\u user
。我很确定您不需要它们,因为您可以在需要时通过join从帐户
检索这些数据。