首页 新闻 会员 周边 捐助

主表和主表的扩展表关系处理以及如何执行搜索

-1
悬赏园豆:50 [已解决问题] 解决于 2021-01-04 22:40

背景

  文章表(Article) 有字段如下

  Id , Title , Author , Description , Content , SortId

  1 , "文章标题" , "文章简介" , "文章内容" , 10

  然后有个新需求 , 需要为文章增加 英文标题 

 

常规做法为

  在文章表中新建字段 EnTitle ,

  Id , Title , Author , Description , Content , SortId , EnTitle

  1 , "文章标题" , "文章简介" , "文章内容" , 10 , "I'm Article EnTitle"

 

  但是这种做法比较粗暴, 假设后面还要增加  "文章来源" , "引用地址" 等等  , 这个时候要再去加字段涉及到的修改就比较麻烦 . 说白了还是扩展性不高

 

于是出现了如下解决方案

  新增一张表为 文章扩展信息表 (ArticleMate) , 表结构如下

  Id , ArticleId , Field , Value

此时如果再发生需要增加字段即为

  在 文章扩展表中增加一条数据 (以EnTItle举例)

  1 , 1 , "EnTitle" , "I'm Article EnTitle"

 

  这样设计扩展性是高了许多 , 但是有个疑问 , 如果当 ArticleMate中的EnTitle 也需要参与到搜索条件中来的话 , 此时应该怎么操作呢 ?

  

  需要一个思路来解决这个问题 , 望各位大佬不吝赐教 . 小弟谢过了

kaolasz的主页 kaolasz | 初学一级 | 园豆:5
提问于:2020-06-25 17:14
< >
分享
最佳答案
0

关系型数据对这种场景的解决就是很蹩脚的,你既想要扩展方便,又想要查询舒服,鱼和熊掌怎么兼得,无论怎么设计在关系型数据库中都会有一两缺点,所以我推荐你讲数据整合后存入es,查询都走es,关系型数据库只存储和简单的查询。

收获园豆:20
8号位 | 小虾三级 |园豆:596 | 2020-07-19 21:39
其他回答(5)
0

按照你这个思路做下去,很快你就会做一个谷歌搜索引擎了。

收获园豆:5
爱编程的大叔 | 园豆:30844 (高人七级) | 2020-06-26 09:22
0

秀儿

RookieBoy666 | 园豆:156 (初学一级) | 2020-06-27 00:14
0

用join啊。

select * from article join ArticleMate where ArticleMate.Field  = 'EnTItle' and Value = 'xxxx'

建议不要这样搞吧,文章有哪些属性应该是相对不太变化的吧,建议修改文章表结构。

收获园豆:15
会长 | 园豆:12463 (专家六级) | 2020-06-28 09:32
0

文章的基本属性基本不会太多,不会太多的就直接文章表里加,涉及到到跟文章一对多相关的信息,再加表

收获园豆:5
风行天下12 | 园豆:3867 (老鸟四级) | 2020-07-01 12:20
0

按照数据库设计三大范式来说,没必要扩展新表

收获园豆:5
F12-爱码士 | 园豆:254 (菜鸟二级) | 2020-09-09 15:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册