在图书馆数据库中标记书籍

时间:2017-06-02 19:01:37

标签: sql database postgresql

我有两张桌子,"书籍"和"标签"。我有第三个" 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。

2 个答案:

答案 0 :(得分:0)

我会研究postgresql的触发函数:https://www.postgresql.org/docs/9.6/static/functions-trigger.html

您可以创建一个触发器,无论何时在特定表上插入/删除/更新,您都可以运行一个可以自动执行任何操作的函数。

答案 1 :(得分:0)

是的,您可以在插入查询中使用触发器。检查一下 1.创建一个函数,只要再次执行book_tags新查询,就会向标记表添加新记录。 2.使用上面的

为book_tags上的每一行创建一个触发器
  

var dict = (Dictionary<string, object>) data[row]; // Set Name cell.nameText.text = dict["Name"].ToString(); // Set score cell.score.text = string.Format("{0:n0}", dict["HighScore"]); // Fb Profile IMG StartCoroutine(getFBPicture(cell.image, dict["FacebookId"].ToString()));

     

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

     

create table tags(tag_name int PRIMARY KEY);

  1. 创建函数addtotags()
  2. create table book_tags(isbn int  references books(isbn), tag int
      references tags(tag_name));
    1. 创建一个触发器execadd_to_tags:
    2. create or replace function addtotags() returns trigger as $$                                                                                         
      begin                                                                                                                                                           
      insert into tags(tag_name) values(new.tag_name);                                                                                                                
      return new;                                                                                                                                                     
      end;$$                                                                                                                                                          
      language plpgsql;
      
      create trigger execadd_to_tags before insert on book_tags for each row
              execute procedure addtotags();