如何在依赖项中创建依赖项[postgresql]

时间:2016-02-16 17:19:01

标签: postgresql dependencies

我目前在数据库架构上遇到问题。

我有这个布局

   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文档并一直搜索到,我找不到方法,谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

首先从最后一个create语句中删除最后两个符号")。然后创建表将起作用。但你会得到这样的依赖:

  account
  |      \
  likes  |
  |      /
  matche

那是因为你在account表中两次引用了matche表 如果你删除了一个用户,所有喜欢和matche都会被删除,所有matche都会在删除同类记录时被删除。

只是猜测 - 因为不知道你在追求什么 - 你可以不使用matche.id_usermatche.id_other_user列。

考虑向likesmatches添加约束,以防止在同一行中拥有相同的帐户ID和相同的ID两次。

matche表目前没有主键。

相关问题