我想用php和mysql创建一个简单的标签系统,这样用户可以通过表单添加一些标签。我的问题是,我应该将标签保存为单个数据库列中的数组吗?例如。 “tag1,tag2,tag3”..或者我应该在数据库表中有单独的列,我应该在每列中保存每个标签。 我希望我的问题很清楚。 谢谢。如何在数据库中保存标签(关键字)?
9
A
回答
20
我可能不会说。在标签和被标签对象之间使用多对多的关系。举例来说,如果被标记的东西是一个问题,表看起来是这样的:
Question:
QuestionId
Title
Body
Tag:
TagId
Name
QuestionTags:
QuestionId
TagId
0
你可以使用序列化并unserialise的关键字存储在一个领域。这里更多的信息 http://php.net/manual/en/function.serialize.php
事情是这样的......
$keywords = array('apple', 'pear', 'banana', 'peach');
$keywords_serialized = serialize($keywords);
$sql = INSERT INTO dbtable (keywords) VALUES ($keywords_serialized);
8
今天跨越这个问题来了,以及与聚集在这里的一些想法,虽然问题不是很新的,我会离开我解决方案以及:
我认为答案克劳斯Byskov霍夫曼给了不错,但我会添加,并将标记列表存储为像他说的多对多表,但也作为序列化的字符串以某种形式(通过像user466764说的序列化,或者像你自己说的逗号分开的事情,这可以与我一起处理mplode/explode)在主表中。
是啊,我知道:存储相同的数据两次不能很好地与许多数据库的完美主义者接受,因为它担负着越来越不一致的危险,但我会为性能和简单做到这样:
多对多表(标签表)仅用于搜索。为了提高搜索性能,我只限于访问该表以进行搜索(当然,我们需要在编辑标签时对其进行更新),但从不查询它仅用于在某处查看/列出标签。并且序列化标签列表适用于查看相关文章或项目的每个地方 - 当显示该项目时,表格已经存在,每当您想要显示该页面时再对标签表格进行查询在主表中已经有了列表时,这是不必要的。确保在更新标签时要小心,以便始终在两个地方更新它们,最好通过一个既执行两者的setter函数,也不应存在不一致的问题。
相关问题
- 1. 如何使用PHP将标签/关键字从数组保存到数据库?
- 2. 在数据库中保存标签
- 3. 如何存储关键字/标签
- 4. 如何在数据库中存储帖子的关键字
- 5. 从表单保存数据库中的数据。关键错误
- 6. IOS保存标签数据
- 7. 如何确保组合键在数据库中不存在?
- 8. Firebase保存对象作为数据库的关键字
- 9. 在图数据库中存储标签
- 10. 在数据库中存储JSP标签
- 11. 将会话保存到标签,然后保存回数据库
- 12. 如何允许在sql数据库中保存重复键
- 13. 如何在数据库中保存'contenteditable'
- 14. 如何在数据库中保存
- 15. 如何在数据库中保存XamDiagram?
- 16. 如何在Android中保存数据库?
- 17. 如何在数据库中保存HTML
- 18. Twitter4j:在标签中搜索关键字
- 19. 保存数据库标准
- 20. DotNetNuke页面关键字存储在数据库中的位置?
- 21. 为什么输入关键字不存储在数据库中?
- 22. 在数据库或derrive中存储URL关键字
- 23. 如何在数据库中存储无限标签?
- 24. 如何在数据库中存储域名标签?
- 25. 如何保存数据库
- 26. 如何在oracle数据库中创建唯一的关键字?
- 27. 如何按关键字/标签对git存储库进行分组
- 28. 关键字标签结构
- 29. 元标签关键字
- 30. 策略保存表单数据(在标签/浏览器关闭)
这种方式提供可扩展性并允许使用索引进行数据库优化。好答案。 – 2010-12-21 14:14:24
我登陆此页面搜索关于在此类方案中更新标签列表的建议。你会怎么做? DELETE FROM QuestionTags WHERE QuestionId = 123然后INSERT INTO QuestionTags所有剩下的和新的标签?这对开发者来说似乎是最简单的,但对性能来说可能不是最好的... – Henno 2012-07-04 18:05:58
@Henno我不知道我明白你的意思。你可以问一个单独的问题吗? – 2012-07-05 08:05:36