请教下各位,就是在论坛写文章的时候会有个给文章加标签的功能,请问这个数据库应该怎样设计?
我有想过存在文章表,用户输的标签又没办法控制的,这样的话就没办法对标签进行管理.比如现在我想要用标签做一个条件查询就不行.
回复内容:
我有想过存在文章表,用户输的标签又没办法控制的,这样的话就没办法对标签进行管理.比如现在我想要用标签做一个条件查询就不行.
建立一个标签表。标签表里面是标签ID,Name等,创建一个关联表,然后保存ArticleID,TagID,然后输入或者抓取文章的时候提取标签。先判断标签表是否存在已经获得的标签,没有就更新,然后将标签的ID存入关联表,然后加上文章的ID。到时候更新的时候,可以直接通过关联表取出,这样就可以成功显示了。
数据库的设计有三大范式,
1.是数据库中的字段是原子的,不能再进行拆分。标签貌似符合,但是标签也有标签单独的属性,如果后期要根据标签单独筛选出列表的话,不方便。
<code>CREATE TABLE `user_label` ( `id` int(11) NOT NULL AUTO_INCREMENT, `type` tinyint(1) NOT NULL DEFAULT '0' COMMENT '类型', `lable_name` varchar(255) NOT NULL COMMENT '标签名称', `user_id` int(11) NOT NULL COMMENT '创建者', `create_time` datetime NOT NULL COMMENT '创建时间', PRIMARY KEY (`id`), ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COMMENT='标签表';</code>
标签放单独的数据表,帖子数据表放一个tags字段,用|
分割,标签中不允许出现‘|’字符。
建立一个表存放标签的 文章表添加一个字段存放标签id 当用户添加标签 检测标签是否重复 存放到标签表里 然后 更新文章表里的标签字段
两张表
建立一个标签表
一个文章标签关联表,字段为文章ID和标签ID
这样查询的时候只要查询关联表标签对应的文章ID即可。
这应该是数据库设计中的多对多关系吧,设计3张表 文章表 标签-文章关联表 标签表, 标签文章表里设置双主键,分别是标签表跟文章表的ID, 查询的时候可以使用join语句直接过滤出想要的结果,还有一种方法 在新的mysql5.7里使用json来存放tag数据 这样可以避免设置多张表 如果答案错误,麻烦指出,如果满意,请帮我点赞 谢谢
我认@ivanilla说的对,这样的表设计就差不多可用了。也不用多表关联查询标签字段,使用起来也简单。
手上正好有纸,直接画了个简单的E-R图
不知道别乱踩好不好,我的回答虽然没能直接帮他解决,可是也是一个非常好的思路。傻逼绕道,谢谢

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

选择MySQL的原因是其性能、可靠性、易用性和社区支持。1.MySQL提供高效的数据存储和检索功能,支持多种数据类型和高级查询操作。2.采用客户端-服务器架构和多种存储引擎,支持事务和查询优化。3.易于使用,支持多种操作系统和编程语言。4.拥有强大的社区支持,提供丰富的资源和解决方案。

PHP社区提供了丰富的资源和支持,帮助开发者成长。1)资源包括官方文档、教程、博客和开源项目如Laravel和Symfony。2)支持可以通过StackOverflow、Reddit和Slack频道获得。3)开发动态可以通过关注RFC了解。4)融入社区可以通过积极参与、贡献代码和学习分享来实现。

PHP在现代编程中仍然是一个强大且广泛使用的工具,尤其在web开发领域。1)PHP易用且与数据库集成无缝,是许多开发者的首选。2)它支持动态内容生成和面向对象编程,适合快速创建和维护网站。3)PHP的性能可以通过缓存和优化数据库查询来提升,其广泛的社区和丰富生态系统使其在当今技术栈中仍具重要地位。

Oracle 乱码问题可以通过以下步骤解决:检查数据库字符集以确保与数据相匹配。设置客户端字符集以与数据库相匹配。转换数据或修改列字符集以匹配数据库字符集。使用 Unicode 字符集,并避免多字节字符集。检查数据库和客户端的语言设置是否正确。

MySQL是一种开源的关系型数据库管理系统,主要用于快速、可靠地存储和检索数据。其工作原理包括客户端请求、查询解析、执行查询和返回结果。使用示例包括创建表、插入和查询数据,以及高级功能如JOIN操作。常见错误涉及SQL语法、数据类型和权限问题,优化建议包括使用索引、优化查询和分表分区。

Oracle 打不开的解决办法包括:1. 启动数据库服务;2. 启动监听器;3. 检查端口冲突;4. 正确设置环境变量;5. 确保防火墙或防病毒软件未阻止连接;6. 检查服务器是否已关闭;7. 使用 RMAN 恢复损坏的文件;8. 检查 TNS 服务名称是否正确;9. 检查网络连接;10. 重新安装 Oracle 软件。

打开 Oracle 数据库的步骤如下:打开 Oracle 数据库客户端连接到数据库服务器:connect username/password@servername使用 SQLPLUS 命令打开数据库:SQLPLUS

AWR 报告是显示数据库性能和活动快照的报告,解读步骤包括:识别活动快照的日期和时间。查看活动、资源消耗的概览。分析会话活动,找出会话类型、资源消耗和等待事件。查找潜在性能瓶颈,如缓慢的 SQL 语句、资源争用和 I/O 问题。查看等待事件,识别并解决它们以提高性能。分析闩锁和内存使用模式,以识别导致性能问题的内存问题。
