V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
sunmoon1983
V2EX  ›  MySQL

自定义表单在数据库中要怎么储存?

  •  
  •   sunmoon1983 · 2023-10-26 13:19:43 +08:00 · 1866 次点击
    这是一个创建于 425 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前的一个需求就是要用自定义表单收集数据!

    这个需求还行,表结构是这样的

    CREATE TABLE "t_fields" (
        "id" int(11) NOT NULL,
        "unique_mark" VARCHAR(32 byte) NOT NULL,    -- 唯一标识,32 位
        "sorted" INT4 NOT NULL,                     -- 核心字段,排序标识
        "content" TEXT NULL,                        -- 真实的内容,这里考虑到字段长度无法确定,只有用 text 来规定
        "deleted" TINYINT(1) NULL DEFAULT 0,        -- 软删除标识
        "table_name" varchar(32) NOT NULL
    }
    
    

    现在就是设计到收集数据这里,还要涉及到统计、报表、图标,这张表不知道怎么设计了,请大佬指教!

    10 条回复    2023-10-27 12:45:37 +08:00
    mightybruce
        1
    mightybruce  
       2023-10-26 13:32:25 +08:00   ❤️ 1
    mysql 5.7 以上 支持 json 类型,要么这种自定义结构存类型
    要不使用 meta 元数据表和字段

    你可以看看 wordpress 的表结构是如何扩展的
    https://codex.wordpress.org/Database_Description
    nice2cu
        2
    nice2cu  
       2023-10-26 13:34:28 +08:00
    text 改成 json 吧 不然不好做搜索,但是要支持搜索还是得用 es ck 啥的
    NewYear
        3
    NewYear  
       2023-10-26 17:48:42 +08:00
    我接触过的无代码平台,每个自定义表单都有自己的数据表,表单的内容和表单里的多行数据,都有单独的数据表和字段,表和字段的名称在生成后是固定的,虽然栏位的名称可以修改但其实改的是备注,有一个表专门记录每个表单的结构。后续出报表啥的也很简单。

    你想搞一个统一的表,不是不可以,只是效率太低了。
    maocat
        4
    maocat  
       2023-10-26 18:01:12 +08:00 via iPhone
    我选择 mongodb
    ZGame
        5
    ZGame  
       2023-10-26 18:10:40 +08:00
    @nice2cu 正解
    sunmoon1983
        6
    sunmoon1983  
    OP
       2023-10-26 19:27:03 +08:00
    @NewYear 关键是字段不固定呀
    NewYear
        7
    NewYear  
       2023-10-26 20:58:18 +08:00
    @sunmoon1983

    唉,你还是只想着偷懒,内容都不仔细看一下,这样做不成的。

    每增加一个自定义表单,自动增加一个数据库表(按序号 001 、002 ),每个表单增加一个明细表(表单内的子表,可以编号为 001-1,001-2 等等)增加一个数据库表。

    每个栏位一个字段(同样是 001 、002 、003 ),数字、字符串、日期这些任何数据库都内置了,上传文件/枚举/字典的你存个 ID ,文件相关信息你建一个总表。

    然后你再建一个表,存放每个表单的主表是哪个、明细表有哪些,每个字段的栏位名称是什么。其他信息你也可以存。

    别想着全部存一个表里,性能是问题,写统计的时候更难。

    其他的自己想吧,这些都有成熟的方案了,你可以去下载个别人的开源程序看一看就知道了。

    如果还是看不懂,就忽略吧,当我没说。
    sunmoon1983
        8
    sunmoon1983  
    OP
       2023-10-26 21:51:41 +08:00
    @NewYear 好的,谢谢,我仔细研究一下
    xuanbg
        9
    xuanbg  
       2023-10-26 22:03:05 +08:00
    json
    julyclyde
        10
    julyclyde  
       2023-10-27 12:45:37 +08:00
    如果需要有“某字段=某个值”这种搜索,就不适宜把附加属性压扁成字符串了,还是应该结构化保存
    可以试试 json 类型字段,或者是把附加属性按照“外键 ID 、字段名字、字段值”写成附加属性表
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1346 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 17:27 · PVG 01:27 · LAX 09:27 · JFK 12:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.