2016-10-27 31 views
1

所以我有以下模式。如何正確配置數據庫模式並插入

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的用戶都已經存在。

+0

插入'公告'(不帶觸發器)時,不可能出現提及的錯誤。請發佈您的完整架構。 –

+0

這個錯誤似乎更符合數據庫的要求,我需要先創建一個id爲12的group_table,然後才能插入公告。我如何做到這一點,以便在插入公告時不需要存在group_table id? – dszopa

+0

仔細查看錯誤消息:違反了「GROUP_TABLE_EVENT_ID_FK」。這意味着'group_table'操作期間發生錯誤,而不是'公告'一次。再說一遍:向我們展示更多(架構和腳本)。 –

回答

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並與分別爲2和3的ID的用戶在值插入已經存在。

是的,在userid = 2)和groupid = 3)中相應的行將具有之前試圖插入到user_group插入。

相關問題