自定义字段的功能数据库是怎么设计的呢?

2022-11-15 16:07:18 +08:00
 clockwork1122
业务中开发了个设施巡检系统,功能只是记录对种类不同的设备进行记录。例如消防拴可能 5 个属性,然后闸门是 7 个属性。如果描述不清楚,同样的需求在 OA 平台、问卷系统、低代码平台很常有,想了解下一般实现方案。


目前想到有几种方案:
1. 一种类型一个数据表
2. 一个数量极大的数据表,使用 type 区分,另外一张表存每个 type 具体的属性
3. 一个数据表,使用 mysql8 的 json 类型
1642 次点击
所在节点    问与答
19 条回复
tool2d
2022-11-15 16:12:12 +08:00
我看到过别人设计的 sql 系统,都是用单独一个表格,设计可变动的字段。虽然我个人觉得动态改改表结构,也没啥问题来着。
Morii
2022-11-15 16:12:49 +08:00
这属于打 Tag 了吧?
K7TrSJryPNjj
2022-11-15 16:17:23 +08:00
EAV
ztxcccc
2022-11-15 16:23:46 +08:00
想想 CMS 是如何让用户定制字段的
clockwork1122
2022-11-15 16:24:41 +08:00
@tool2d 动态改表结构意味着需要改代码,例如是做 OA 平台,有 10 个公司,每个公司都有自己的模版,就太累了
clockwork1122
2022-11-15 16:30:15 +08:00
@ztxcccc 没接触过 CMS 系统,是我认识不准确吗,内容发布一般就标题、内容、之类的,字段还比较固定吧,觉得问卷调查系统更贴合需求
clockwork1122
2022-11-15 16:30:26 +08:00
@Morii 不是吧
clockwork1122
2022-11-15 16:30:39 +08:00
@K7TrSJryPNjj 谢老哥,我查查
RoninZc
2022-11-15 17:35:54 +08:00
http://jintang.zone/2021/08/31/%e5%8a%a8%e6%80%81%e5%ad%97%e6%ae%b5%e5%ad%98%e5%82%a8%e6%96%b9%e6%a1%88%e5%af%b9%e6%af%94.html
a546016387
2022-11-15 18:07:24 +08:00
@RoninZc #9 老哥博客是啥主题,挺好看的
clockwork1122
2022-11-15 18:49:49 +08:00
@RoninZc 感谢老哥
optional
2022-11-15 19:38:27 +08:00
你的需求那么明确了(类型对应固定的字段集合),那显然 json 是最合适的。
查询的时候,直接 type=? AND attrs->'?' == ? 就好(这里用 pg 的语法)
zxfreedom
2022-11-15 19:42:01 +08:00
同楼上,可以用 json 试试
xiaomada
2022-11-15 19:53:28 +08:00
用 Nosql ,比如 MongoDB 就是专门搞这种的,每条数据属性都可以不同
wbrobot
2022-11-15 20:26:11 +08:00
@tool2d
直接用开源的无头 cms 啊, 如 directus 以前是 php 后端,现在全 nodejs 了, 还有 strapi 等等
或者类似的数据集管理库,如 supabase, 还有 go 开发的宣称单运行文件为特色的 pocketbase

如果要自己开发,就参考开源实现,很多啊
securityCoding
2022-11-15 22:06:10 +08:00
推荐用 mongo 之类的,用 mysql 纯属是找不自在
flankerfc
2022-11-15 22:31:25 +08:00
你的类型有多少。mongodb 肯定可以解决,mongodb 本身就是 document 数据库,没有 schema ,性能也足够。但是你需要有一套成熟的 ORM 框架。还有如果用 mongodb 你也要考虑到和其他数据表的 relation 。如果你已经很熟悉 mysql 或者 psql 了,用 json 类型其实也可以。或者就是单独一个表来保存扩展属性( key/value 的形式),这种就是读取数据时,要 join 联查出来
RoninZc
2022-11-16 09:54:58 +08:00
@a546016387 @clockwork1122 网上冲浪找的博客,主题是啥我也不知道😂
hperfect
2022-11-19 16:42:09 +08:00
postgresql 的表继承方案也可以了解一下, 我们公司用的就是这种方案

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/895430

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX