Database 在 MySQL 里如何存储图书的标签信息?

jasonliu · 2015年10月18日 · 最后由 jasl 回复于 2015年10月19日 · 1991 次阅读

一个用户可以收藏很多的书籍,但是每本书籍都有不同的标签(一个或者很多个),需要列出用户的所有标签以及当前的热门标签,如何在mysql里存储标签信息呢,是只用一个单独的字段存储还是单独创建一张表去存储?

希望有相关经验的可以指点一下?

共收到 8 条回复

单独表放的,为了复用,比如查阅某个标签下的图书会方便很多。 另:试试 gem acts-as-taggable-on不错

再弄两张表

book_tags

  • book_id
  • tag_id

tags

  • name

这样更符合范式

我现在建了两张表,一张用于存储收藏的图书,一张存储tag。

favorates 表:

user_id: 用户ID book_id: 图书编号

tags 表:

book_id: 图书编号 name: 标签名

#3楼 @jasonliu 差一张, book_tags 多对多, 不然你这个和不建tag表有什么区别.

@flowerwrong @xiaoronglv 确实应该这样做,非常感谢!!!

用 PostgreSQL 比较方便

create table test_array(id serial primary key, phone int8[]);

insert into test_array(phone) values ('{1,2}');
insert into test_array(phone) values (array[3,4,5]);

select id ,phone from test_array where phone && array[1,2]::int8[];

#2楼 @xiaoronglv 按rails的惯用法 关联表 book_taggings 会更好

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册