sql– 规范化“Toxi”方式真的值得吗? (3NF)

sql– 规范化“Toxi”方式真的值得吗? (3NF),第1张

概述我正处于数据库设计的早期阶段,所以还没有最终结果,我正在使用“TOXI”3表设计作为我的线程,它有可选标签,但我不禁觉得加入是不是真的有必要,也许我需要依靠我的帖子表中的一个简单的标签列,我可以在其中存储类似< tag>,< secondTag>的varchar.所以回顾一下:>是否值得在2个标签表上额外左连接的麻烦,而不是在我的posts表中只有一个

我正处于数据库设计的早期阶段,所以还没有最终结果,我正在使用“TOXI”3表设计作为我的线程,它有可选标签,但我不禁觉得加入是不是真的有必要,也许我需要依靠我的帖子表中的一个简单的标签列,我可以在其中存储类似< tag>,< secondTag>的varchar.

所以回顾一下:

>是否值得在2个标签表上额外左连接的麻烦,而不是在我的posts表中只有一个标签列.
>有没有办法可以优化我的查询?

架构

CREATE table `posts` (    `post_ID` INT UNSIGNED PRIMARY auto_INCREMENT,`post_name` VARCHAR(255)) Engine=InnoDB;CREATE table `post_Tags` (    `tag_ID` INT UNSIGNED PRIMARY auto_INCREMENT,`tag_name` VARCHAR(255)) Engine=InnoDB;CREATE table `post_Tags_map` (    `map_ID` INT PRIMARY auto_INCREMENT,`post_ID` INT NOT NulL,`Tags_ID` INT NOT NulL,FOREIGN KEY `post_ID` REFERENCES `posts` (`post_ID`),FOREIGN KEY `post_ID` REFERENCES `post_Tags` (`tag_ID`)) Engine=InnoDB;

样本数据

INSERT INTO `posts` (`post_ID`,`post_name`)  VALUES(1,'test');INSERT INTO `post_Tags` (`tag_ID`,`tag_name`)  VALUES(1,'mma'),(2,'ufc');INSERT INTO `posts_Tags_map` (`map_ID`,`post_ID`,`Tags_ID`)  VALUES(1,1,1),2);

当前查询

SELECT     posts.*,GROUP_CONCAT( post_Tags.tag_name order by post_Tags.tag_name ) AS Tags  FROM posts    left JOIN posts_Tags_map      ON posts_Tags_map.post_ID = posts.post_ID    left JOIN post_Tags      ON posts_Tags_map.Tags_ID = posts_Tags.tag_ID  WHERE posts.post_ID = 1  GROUP BY post_ID

结果

如果有标签:

06003

最佳答案将所有标记放在不同的记录中(标准化)意味着您可以在需要时更轻松地重命名标记并跟踪标记名称历史记录.

例如,重命名sql Server相关标签至少三次(mssql – > sqlserver – > sql-server).

将所有标记放在一个记录中(非规范化)意味着您可以使用FulLTEXT索引索引此列,并一次搜索具有两个或更多标记的帖子:

SELECT  *FROM    postsWHERE   MATCH(Tags) AGAINST('+mma +ufc')

这也是可能的,但标准化设计效率较低.

(不要忘记将@ft_min_word_len调整为3个字符或更少的索引标记,以便工作)

您可以组合两种设计:存储地图表和非规范化列.但这需要更多的维护.

您还可以将规范化设计存储在数据库中,并使用您提供的查询将标记提供给Sphinx或Lucene.

这样,您可以使用MysqL进行历史挖掘,使用Sphinx进行全文标记搜索,并且不需要额外的维护.

总结

以上是内存溢出为你收集整理的sql – 规范化“Toxi”方式真的值得吗? (3NF)全部内容,希望文章能够帮你解决sql – 规范化“Toxi”方式真的值得吗? (3NF)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1166800.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存