如何正确配置数据库架构&插入

时间:2016-10-27 21:42:55

标签: sql

所以我有以下架构。

CREATE TABLE user_group (
  id BIGINT PRIMARY KEY NOT NULL,
  user_id BIGINT NOT NULL,
  group_table_id BIGINT NOT NULL,
  role VARCHAR(255),
  CONSTRAINT user_group_user_id_fk FOREIGN KEY (user_id) REFERENCES user(id),
  CONSTRAINT user_group_group_table_id_fk FOREIGN KEY (group_table_id) REFERENCES group_table(id)
);

CREATE TABLE group_table
(
  id BIGINT PRIMARY KEY NOT NULL,
  group_name VARCHAR(255),
  group_picture_url VARCHAR(255),
  tags VARCHAR(255),
  description VARCHAR(255),
  event_id BIGINT,
  user_group_id BIGINT,
  CONSTRAINT group_table_user_group_id_fk FOREIGN KEY (user_group_id) REFERENCES user_group(id)
);

CREATE TABLE user (
  id BIGINT PRIMARY KEY NOT NULL,
  display_name VARCHAR(255) NOT NULL,
  email VARCHAR(255) NOT NULL,
  description TEXT NOT NULL,
  picture_url VARCHAR(255),
  user_group_id BIGINT,
  event_response_id BIGINT,
  CONSTRAINT user_user_group_id_fk FOREIGN KEY (user_group_id) REFERENCES user_group(id),
);

我怎样才能使它成为有效的陈述?从某种意义上说,我应该能够创建一个user_group表,group_table表或用户表而不需要其他表。

我的另一个问题是。假设此语句有效且表存在。如何将数据插入user_group?

INSERT INTO user_group VALUES (1, 2, 3, 'role')

在插入值时,将要求group_table和id为2和3的用户分别存在。

1 个答案:

答案 0 :(得分:1)

  

我怎样才能使它成为有效的陈述?从某种意义上说,我应该能够创建一个user_group表,group_table表或用户表而不需要其他表。

您可以先创建表,然后创建外键约束。如果你试图同时做这两件事(就像你现在的那样),你会遇到鸡蛋和鸡蛋的情况。

以下是您可以执行此操作的示例:

CREATE TABLE user_group (
  id BIGINT PRIMARY KEY NOT NULL,
  user_id BIGINT NOT NULL,
  group_table_id BIGINT NOT NULL,
  role VARCHAR(255)
);

CREATE TABLE group_table
(
  id BIGINT PRIMARY KEY NOT NULL,
  group_name VARCHAR(255),
  group_picture_url VARCHAR(255),
  tags VARCHAR(255),
  description VARCHAR(255),
  event_id BIGINT,
  user_group_id BIGINT
);

CREATE TABLE user (
  id BIGINT PRIMARY KEY NOT NULL,
  display_name VARCHAR(255) NOT NULL,
  email VARCHAR(255) NOT NULL,
  description TEXT NOT NULL,
  picture_url VARCHAR(255),
  user_group_id BIGINT,
  event_response_id BIGINT
);

alter table user_group
add constraint user_group_user_id_fk
foreign key (user_id) 
references user(id);

alter table user_group
add constraint user_group_group_table_id_fk
foreign key (group_table_id)
REFERENCES group_table(id);

alter table group_table
add constraint group_table_user_group_id_fk
FOREIGN KEY (user_group_id)
REFERENCES user_group(id);

alter table user
add constraint user_user_group_id_fk
FOREIGN KEY (user_group_id)
REFERENCES user_group(id);
  

我的另一个问题是。假设此语句有效且表存在。我如何将数据插入user_group?

INSERT INTO user_group VALUES (1, 2, 3, 'role')
     

在插入值时,将要求group_table和id为2和3的用户分别存在。

是的,在尝试插入user之前,必须插入id = 2group)和id = 3user_group)中的相应行。