php - 从逻辑上考虑数据库结构 : Adding 'tags' to things users post - A seperate table or. ..?

标签 php mysql database database-design codeigniter

我仍然开始了解整个关系数据库 thingymawhatsit。不管怎样,我是一名 PHP 程序员,所以我可以完成所有这些工作。我只需要考虑什么是这种情况的最佳方法...

我正在开发一个网站(使用 CodeIgniter,如果有帮助的话)- 一个用户可以发布内容的网站(想想博客风格的东西)。每个帖子都必须有标签,任何数量的标签,我不能只限于 3 或 5 个。这必须是无限制的。

那么我应该做哪些呢?

  1. 将标签放在同一个数据库表中的帖子旁边,即“entries”包含“post”、“title”和“tags”(显然还有“id”)
  2. 将标签放在它们自己的表格中,并将每个标签行链接到条目“id”...?
  3. ...完全是别的东西?

只需要知道执行此操作的最佳、最合乎逻辑的结构方式。考虑相互通信的表已经够令人困惑了...!

哦,对于任何拥有任何 CodeIgniter 代码片段的人来说,奖励积分可能会让我一路走来;)

谢谢!

jack

最佳答案

基本上,您需要标签和帖子之间的 n-m 关系:

  • 每个帖子可以有多个标签
  • 每个标签可以对应多个帖子。


使用关系数据库,这是通过三个表完成的:

  • 一个“post”表,每篇文章一行
  • 一个“标签”表,每个标签一行
  • 和一个“post_tag”表,其中包含标签和帖子之间的每个对应行——这意味着每个标签有几行;每个帖子几行


在您的数据库中,您将拥有这三个表:

  • 发布
    • 编号
    • 标题
    • 内容
    • ...
  • post_tag
    • id_post => 帖子的外键

    • id_tag => 标签的外键

  • 标签
    • 编号
    • 姓名

关于php - 从逻辑上考虑数据库结构 : Adding 'tags' to things users post - A seperate table or. ..?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2307150/

相关文章:

php - PHP 中的字节缓冲区?

php - 无法使用 DB_NAME : Access denied for user

php - 安排在 IIS 中运行的 PHP 任务

c# - 状态 500 : InvalidOperationException: No route matches the supplied values

mysql - 如何查询连接表以满足多个条件?

php - 外来字符在mysql中变成垃圾

database - 使用 Perl,如何使用 dbh csv_tables 从标准输入读取 CSV 字符串?

php - 如何通过模型显示表中的数据(自定义行除外)

java - BaseX XML 数据库代码

mysql - 选择 MySQL 表列中的非重复记录