2017-06-02 50 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);