mysql - 博客文章表结构-MySQL

标签 mysql sql database-design

我创建了 2 个表来存储文章信息。

KB_Parent

  • ID[pk]
  • 标题
  • 标签
  • 用户标识符
  • 作者姓名

KB_详细信息

  • ID[pk]
  • 用户标识符
  • 作者姓名
  • 标题
  • 标记
  • 正文

我创建了 KB_Parent 表用于搜索和列出最新文章目的,并创建了 KB_Detail 表用于显示文章的详细信息。
由于 KB_Parent 将仅用于搜索,我将实现 MyISAM FullText 和其他表 InnoDB

我对我的表的看法是否正确,还是一张表就可以解决这个问题?

我避免使用外键,因此我不必运行内部查询或连接来获取结果

最佳答案

您没有在问题中明确说明这一点,但我假设您出于以下原因想要采用这种设计:

  • 文本字段很大,您希望在显示摘要数据时需要返回大量行(或者更糟糕的是,有时您需要进行表扫描以获取摘要行的列表)。出于性能原因,您正在尝试跳过不必要的文本字段读取。
  • MyISAM 支持全文搜索,而 InnoDB 不支持,因此您可以对要使用全文搜索的表使用 MyISAM。

我会验证断言 1 是否真的正确。如果汇总查询可能使用单个索引并且可能返回少量行,则断言 1 不正确。折叠成一张 table 。

如果断言 1 是正确的并且性能差异很大,那么是的,最好有两个表。但是,如果您使用两个表,我会避免使用 MyISAM,因为它不支持事务(即,如果插入出错,您可能会进入只有两个表之一存在的状态)并且它不支持外键。虽然 InnoDB 本身不支持全文搜索,但您可以使用开源外部开源全文搜索引擎(如 Sphinx)。

如果您确实使用两个表,我不明白您为什么要重复数据。如果有人选择查看某行的详细信息,您将已经从摘要行中获得标题/作者等信息(因此您不需要执行 JOIN 查询)。

我也没有看到你有什么反对外键的。它们将允许您在两个表之间建立主要的参照完整性。外键的唯一实际成本是在您添加/删除/修改行时(需要按索引进行额外查找以确保其他表中的行存在)。当你需要在连接两个表时进行查询时,它并不昂贵(因为数据库可以通过从第一个表获得的主键查找第二个表 ->很可能通过嵌套连接两个表-循环连接)。

关于mysql - 博客文章表结构-MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5929307/

相关文章:

mysql - 使用 JDBC 检索 latin1 编码的结果

mysql - 从一张票中请求多个用户 | mysql多对多

mysql - SQL - 检查列是否自动递增

sql-server - 使用 ASP.NET MVC 和 SQL Server 实现家谱的最佳方法是什么

mysql - order_products 表应该非规范化吗?

sql-server - 在SQL Server中设计条件数据库关系

mysql - 从同一列计算mysql中的百分比

mysql函数调用

php - WP - 用于在数据库中创建时间戳的按钮

php - 在 PHP SQL 上复制表时出现问题