如何在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从
帐户
检索这些数据。