markdown文章mysql数据库表设计

目的:

设计mysql数据库表,用来保存用户的markdown文章,支持关键词搜索文章,支持查看历史修改记录

可以参考以下步骤:

创建一个名为articles的表,用来存储文章的基本信息,如id, title, author, content, keywords, created_at, updated_at等字段。其中content字段可以使用text类型,用来存储markdown格式的文本。

创建一个名为revisions的表,用来存储文章的历史修改记录,如id, article_id, content, created_at等字段。每次更新文章时,将原始内容插入到这个表中,以便于查看历史版本。

使用全文索引(full-text index)或者倒排索引(inverted index)来实现关键词搜索文章的功能。全文索引是一种在数据库中对文本字段进行索引的方法,可以提高搜索效率。倒排索引是一种将文本分词后,建立词和文档之间的映射关系的方法,可以提高搜索精度。

CREATE TABLE articles (
  id INT PRIMARY KEY AUTO_INCREMENT,
  title VARCHAR(255) NOT NULL,
  author VARCHAR(255) NOT NULL,
  content TEXT NOT NULL,
  keywords VARCHAR(255),
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  FULLTEXT (title, content)
);


CREATE TABLE revisions (
  id INT PRIMARY KEY AUTO_INCREMENT,
  article_id INT NOT NULL,
  content TEXT NOT NULL,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (article_id) REFERENCES articles (id) ON DELETE CASCADE
);


CREATE TABLE users (
  id INT PRIMARY KEY AUTO_INCREMENT,
  username VARCHAR(255) NOT NULL UNIQUE,
  password VARCHAR(255) NOT NULL,
  email VARCHAR(255) NOT NULL UNIQUE,
  avatar VARCHAR(255),
  bio TEXT,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

全文索引(Full-Text Index)和倒排索引(Inverted Index)是用于在文本数据中进行高效搜索的两种索引技术。

全文索引(Full-Text Index):

全文索引是一种在数据库中对文本字段进行索引的方法,它可以快速地找到包含某些关键词的文档。全文索引的原理是将文本分词后,建立一个词典(dictionary),记录每个词出现在哪些文档中,以及出现的次数和位置。这个词典就是一个倒排索引(inverted index),它将词和文档之间的映射关系反转了。

全文索引是一种用于快速搜索文本内容的索引结构。它构建了针对文本字段(如文章内容、博客内容等)的索引,使得可以使用关键词进行全文搜索,而不仅仅是简单的匹配字符或词语。全文索引通常使用特定的算法和数据结构(如倒排索引)来提供高效的搜索性能并支持高级搜索功能,如模糊匹配、语义搜索、权重评分等。

使用示例:

假设我们有一个名为 “articles” 的表,其中包含 idtitlecontent 字段,我们希望能够根据关键词在标题和内容中进行全文搜索。

首先,我们需要为 titlecontent 字段创建全文索引。在 MySQL 中,可以使用 FULLTEXT 索引类型来实现全文索引。

以下是创建全文索引的示例:

CREATE TABLE articles (
  id INT PRIMARY KEY AUTO_INCREMENT,
  title VARCHAR(255),
  content TEXT,
  FULLTEXT(title, content)
);

接下来,我们可以使用 MATCH()AGAINST() 来进行全文搜索。以下是一个使用全文索引进行搜索的示例:

SELECT * FROM articles WHERE MATCH(title, content) AGAINST('关键词');

上述查询将返回包含给定关键词的匹配文章。

倒排索引(Inverted Index):

倒排索引是一种通过关键词快速查找文档的索引结构。与传统的索引方式(正向索引)相反,倒排索引通过记录每个关键词对应的文档列表来实现快速检索。它将关键词作为索引项,而对应的文档则成为倒排列表的一部分。倒排索引适用于大规模文本数据,并且在全文搜索中常被广泛使用。

倒排索引是一种将文本分词后,建立一个倒排列表(inverted list),记录每个词出现在哪些文档中,以及出现的次数和位置。倒排列表可以看作是一种特殊的全文索引,它更加灵活和高效,可以支持多种搜索算法和评分机制。

使用示例:

假设我们有一个包含多个文档的文本集合,我们想要根据关键词查找包含该关键词的文档列表。

首先,我们需要构建倒排索引。倒排索引可以使用各种算法和数据结构实现,例如散列表、树结构或者压缩编码等。以下是一个简化的示例:

Keyword    Document IDs
-------------------------------
apple      1, 3, 5
banana     2, 4, 6
cherry     1, 4, 5, 6

在上述示例中,每个关键词对应一个文档 ID 的列表。

倒排索引的好处是,它允许我们快速地找到包含特定关键词的文档,而无需扫描整个文本集合。

请注意,以上示例为简化演示,实际倒排索引通常会包含更多信息,如词频率、位置信息等,以支持更丰富的搜索功能。

小结

综上所述,全文索引和倒排索引是用于高效搜索文本数据的索引技术。全文索引可用于构建文本字段的索引,从而实现全文搜索功能。倒排索引则通过关键词对应文档的方式,提供了高效的搜索性能和文档检索。


以上内容来自网上信息检索、整理,用于备忘,方便未来查找。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 229,836评论 6 540
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,275评论 3 428
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 177,904评论 0 383
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,633评论 1 317
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,368评论 6 410
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 55,736评论 1 328
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 43,740评论 3 446
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 42,919评论 0 289
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,481评论 1 335
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,235评论 3 358
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,427评论 1 374
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 38,968评论 5 363
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,656评论 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 35,055评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,348评论 1 294
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,160评论 3 398
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,380评论 2 379

推荐阅读更多精彩内容

  • 大家好,我是易安! 之前我们讲过架构设计的一些原则,和架构设计的方法论,今天我们谈谈高性能数据库集群的设计与应用。...
    架构狂人阅读 140评论 0 1
  • 性能测试表明,将 Tantivy 的全文搜索引擎库集成到向量搜索中可以显著提高速度和性能。 译自An SQL Ve...
    rocksun阅读 101评论 0 0
  • 一、数据库索引介绍 索引是一种特殊的文件(MySql数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所...
    it阿布阅读 460评论 0 4
  • 抱佛脚一时爽,一直抱佛脚一直爽!这篇文章总结常见的数据库面试问题~因为是抱佛脚,所以结构上没有什么逻辑...参考链...
    山幺幺阅读 456评论 0 0
  • 国庆在家无聊,我随手翻了一下家里数据库相关的书籍,这一翻我就看上瘾了,因为大学比较熟悉的一些数据库范式我居然都忘了...
    楼兰King阅读 207评论 0 0