Log*_*man 132 database tags tagging database-design
我在我的网站上实现了一个类似于stackoverflow使用的标记系统,我的问题是 - 什么是存储标记的最有效方法,以便可以搜索和过滤它们?
我的想法是这样的:
Table: Items
Columns: Item_ID, Title, Content
Table: Tags
Columns: Title, Item_ID
Run Code Online (Sandbox Code Playgroud)
这太慢了吗?有没有更好的办法?
Sim*_*rfe 185
一个项目将有许多标签.一个标签将属于许多项目.这对我来说意味着你很可能需要一个中间表来克服多对多的障碍.
就像是:
表:项目
列:Item_ID,Item_Title,Content表:标签
列:Tag_ID,Tag_Title表:Items_Tags
列:Item_ID,Tag_ID
可能是你的网络应用程序非常受欢迎,并且需要在路上进行非规范性处理,但是过早地混淆海水是毫无意义的.
Rob*_*edy 107
您应该阅读Philipp Keller关于标记数据库模式的博客文章.他尝试了几个,他报告的结果,无论是在轻松构建常用查询的条件,并在性能方面.标签数量,标记项目数量和每个项目的标签数量都是因素.这些职位来自2005年; 从那时起我就不知道有任何更新.
实际上我认为对标签表进行去标准化可能是更好的前进方式,具体取决于规模.
这样,tags表只有tagid,itemid,tagname.
您将获得重复的标记名,但它使得为特定项添加/删除/编辑标记更加简单.您不必创建新标记,删除旧标记的分配并重新分配新标记,只需编辑标记名即可.
要显示标签列表,您只需使用DISTINCT或GROUP BY,当然您也可以计算标签的易用次数.
如果您不介意使用一些非标准的东西,Postgres 9.4 及更高版本可以选择存储 JSON 文本数组类型的记录。
您的架构将是:
Table: Items
Columns: Item_ID:int, Title:text, Content:text
Table: Tags
Columns: Item_ID:int, Tag_Title:text[]
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅 Josh Berkus 的这篇精彩文章: http://www.databasesoup.com/2015/01/tag-all-things.html
还有更多不同的选项,对性能进行了彻底的比较,上面建议的选项总体来说是最好的。
| 归档时间: |
|
| 查看次数: |
87361 次 |
| 最近记录: |