2017-06-02 105 views
0

我有兩張桌子,「書」和「標籤」。我有第三個「book_tags」,它跟蹤哪些標籤被分配給哪些書。我意識到可能有更好的其他設置,但我們只是說它必須是這樣。在圖書館數據庫中標記書籍

books: isbn (PK), title, author, ... 
tags: tag_name (PK) 
book_tags: isbn (FK), tag (FK) 
    (isbn, tag) form PK 

是否有可能爲book_tags表寫入插入的方式,使得任何新標籤都會自動添加到標籤表中?

如果相關,我使用的是postgres 9.6。

+0

是的,這是可能的。到目前爲止,你有什麼? –

+0

什麼都沒有。我是一個SQL noob,試圖在實踐項目中過於雄心勃勃。 – silenfoot

+1

那麼得到迴應的第一步就是至少發佈表格的結構,並且可能會提供一些示例數據。 –

回答

0

是的,你可以在插入查詢中使用觸發器。檢查此 1.創建一個函數,無論何時再次執行新查詢book_tags,都會將新記錄添加到標記表。 2. book_tags上述

create table books(isbn int PRIMARY KEY, title varchar, author varchar);

create table tags(tag_name int PRIMARY KEY);

create table book_tags(isbn int references books(isbn), tag int references tags(tag_name));

    創建於各行的觸發
  1. 創建函數addtotags()
create or replace function addtotags() returns trigger as $$                       
begin                                       
insert into tags(tag_name) values(new.tag_name);                             
return new;                                      
end;$$                                       
language plpgsql; 
  • 創建觸發器execadd_to_tags:
  • create trigger execadd_to_tags before insert on book_tags for each row 
         execute procedure addtotags(); 
    
    insert into books(1,'abc','x'); 
    insert into book_tags(1,1);