我目前在数据库架构上遇到问题。
我有这个布局
account
|
likes
|
matche
"我不能没有喜欢的比赛,如果没有账号我不能没有#34;
所以我的帐户表:
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'))
我的matche表:
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'))")
"我不能没有喜欢的比赛,如果没有账号我不能没有#34;
如果一个帐户被销毁,他的所有喜欢都会被销毁,所有喜欢的帐户都会被销毁。如果它所链接的相似或者帐户被销毁,那么他的销毁也会被破坏。
所以我的问题是,如何在我的桌子之间创造完美的依赖性,因为它们会在链中产生压制。
我阅读了postgresql文档并一直搜索到,我找不到方法,谢谢你的帮助。
答案 0 :(得分:0)
首先从最后一个create语句中删除最后两个符号")
。然后创建表将起作用。但你会得到这样的依赖:
account
| \
likes |
| /
matche
那是因为你在account
表中两次引用了matche
表
如果你删除了一个用户,所有喜欢和matche都会被删除,所有matche都会在删除同类记录时被删除。
只是猜测 - 因为不知道你在追求什么 - 你可以不使用matche.id_user
和matche.id_other_user
列。
考虑向likes
和matches
添加约束,以防止在同一行中拥有相同的帐户ID和相同的ID两次。
matche
表目前没有主键。