业务现在要保存一些信息,字段加起来有 120 多个字段在一张表里。我按照类型区分了一个,可以分成 8 张表,但是我总不能分到 8 张表里来处理吧,那就是 8 表联查了。然后我又想到可以存成 json 格式,把以前一个表存成一个 json 字段,这样这个表就只有十来个字段了,可能又发现会有一对多的关系,比如表里有个字段是水库,一行数据里会有多个水库,那这样就又没办法存了,有老哥教我一手怎么处理嘛?数据库是 mysql8.0
|  |      1Kontinue      2023-02-28 15:29:59 +08:00 查表,有多表联查的可以考虑建一个视图? | 
|  |      2Maboroshii      2023-02-28 15:39:59 +08:00 via Android 套一下数据库设计范式吧 | 
|  |      3Cloud9527      2023-02-28 15:45:16 +08:00 听你描述感觉 MongoDB 更合适啊 | 
|  |      4corcre      2023-02-28 15:53:31 +08:00 一对多存多个表好像没什么问题, 我司 8 表联查好像也是家常便饭... (其实主要还是看你的数据量 | 
|  |      5Twnysta      2023-02-28 15:55:21 +08:00 主表尽量多的搜索字段,只展示字段挂到别的表,搜索出第一张表的结果后,用 id 去 whereIn 取展示内容 | 
|      6awanganddong      2023-02-28 15:58:32 +08:00 刚开始想那么多干嘛,能跑就可以了,关系型数据库本来就是这么用的,以后同步数据到 es 也可以。 | 
|  |      8lyz1990      2023-02-28 16:00:33 +08:00 嫌麻烦就不改吧,能跑就行,哈哈 | 
|  |      9wangritian      2023-02-28 16:04:11 +08:00 访问量不高的话,先别动了 | 
|  |      10aw2350      2023-02-28 16:07:32 +08:00 postgres ,json 类型字段存储非重要数据 | 
|      11DinnyXu      2023-02-28 16:09:41 +08:00 相同的数据存字典,建立枚举关系。比如 1-10 个字段,是一个组合,可以把这些组合合并为一个字段,然后映射对应的枚举 | 
|  |      12MIUIOS      2023-02-28 16:11:19 +08:00 120 个字段,拆成 8 个表,做查询的时候关联 8 个表? 那是个什么样的画面 太美了不敢相信 看业务需求来 如果你的前台涉及到一个复杂查询,多种条件合并查询,这种我就建议上 ES 或者一些轻量的搜索引擎,你如果真把他拆成 8 个表做关联那效率你在怎么优化都不行的 如果你的前台不涉及复杂查询,那我建议拆表,拆完后采用代码连表,效率也会提升很多 总的来说,我的建议是不要动最好 | 
|  |      13MIUIOS      2023-02-28 16:13:52 +08:00 如果的数据量不多的话完全不需要考虑 ES 之类的,做好数据库优化,然后大胆去拆就好,一些非必须 SQL 连表的采用代码方式填充效率会来的更好一些。 | 
|      14N9f8Pmek6m8iRWYe      2023-02-28 16:14:54 +08:00 又不是不能用 | 
|      15ShuWei      2023-02-28 16:15:49 +08:00 抛开业务场景和需求谈设计,是耍流氓 | 
|  |      16cheng6563      2023-02-28 16:51:30 +08:00 要 WHERE 的列放主表,其他的丢附表用多字段或者 JSON 随意放就行了。 | 
|  |      17rapperx2      2023-02-28 17:02:51 +08:00 能用就行 | 
|  |      18xshell      2023-02-28 17:18:54 +08:00 设计问题,挖坑 | 
|  |      19Felldeadbird      2023-02-28 17:26:59 +08:00  1 能跑就好了。我公司的产品表已经 127 个字段,明天又加一个字段咯。 这么多字段全部都是伪需求,A 提一个需求,结果 A 不用。 | 
|      20seakingii      2023-02-28 17:27:13 +08:00 最好的办法是: 不要改动 | 
|      21tianmalj0613      2023-02-28 17:56:42 +08:00 不影响使用就不要动,影响使用了就重新设计一个新系统吧 | 
|  |      22keshao      2023-02-28 18:00:51 +08:00 在 Mysql 8.0 版本,JSON 也支持检索。可以使用 JSON 函数对数据做一些处理的 https://dev.mysql.com/doc/refman/8.0/en/json.html | 
|  |      23wushigejiajia01      2023-02-28 18:01:25 +08:00 除非有任务要求,不然别动了,真的 干的好,不会加钱, 干的不好,就得背锅 | 
|      24Rache1      2023-02-28 18:06:24 +08:00 曾经接手过一个项目,用户表有将近 300 个字段 😂 | 
|  |      25hhjswf      2023-02-28 18:39:55 +08:00 via Android 视图 | 
|      26ChoateYao      2023-02-28 18:48:29 +08:00 自从做了 ERP 系统之后,我觉得单表 120 个字段很正常,只需要把 1 对多的拆分出来就行了。 | 
|      28stabc      2023-02-28 18:51:38 +08:00 Cassandra | 
|      29PythonYXY      2023-02-28 19:33:03 +08:00 现存问题是什么,业务场景是啥,建议题主给出详细说明 | 
|      30qza1212      2023-03-01 00:47:51 +08:00 改成单值模型 | 
|      31dayeye2006199      2023-03-01 02:07:00 +08:00 多表联查也没这么可怕,完全需要看索引设计和表设计是怎么样的。 一刀切觉得这个查询是世界末日的,那也别用关系型数据库了。 | 
|  |      32cheng6563      2023-03-01 09:49:42 +08:00 @hhjswf JSON 里不用索引的直接用函数筛选就是了,需要索引的挪到主表建索引就行了啊。建视图一旦涉及聚合之类的操作索引就是个玄学不更容易被骂, | 
|  |      33windyboy      2023-03-01 10:13:46 +08:00 为什么不用 nosql | 
|  |      34zoharSoul      2023-03-01 13:17:24 +08:00 放回一个表里 |