传统sql查询痛点及衍生的项目设计思路(设计一款可视化查询工具)

背景

最近三年,工作中很大一部分时间是写sql报表。业务很复杂,几十个表。常用的就有十几个。经常表连接达七八个。写得多了,我也很熟练了,但就是足够熟练了,我就越感觉有以下问题困扰我:

  1. 无法串联excel表进行关联查询,只能导入成临时表来查,这种方法其实是不可取的
  2. 跨库查询麻烦
  3. sql语句写起来麻烦,特别是不熟练的人,比如写时间,老是要写格式化语句(主要是针对新手,老手不怕这个)
  4. 多表关联语句写的很复杂,难以理解和复用
  5. 难以进行模块切分,方便复用
  6. 没有编程的灵活性,比如使用查询出来的数据作为入参进行下一步查询,或者进行字符串分割,拼接等更灵活的操作。
  7. 历史语句不利于保存和检索。保存的sql语句隔一段时间自己打开来看,也看不明白,因为sql语句结构不清晰,不明了。表连接很复杂
  8. 子查询不是那么的灵活,只能在一个层级里进行,多一层就无法进行子查询了

期望达到的效果

  1. 更灵活的查询方式,sql结合编程,尽可能用子查询替代表连接(也保留表连接的查询能力,就需要手写sql语句),结构清晰明了,方便代码的维护
  2. 可视化界面,大部分情况下不需要写sql语句,界面操作即可,只需要聚焦业务,降低sql查询门槛,没基础的人更容易学会查询数据
  3. 可以有明确的目录结构的保存写的sql语句,方便检索和复用
  4. 可以生成报表
  5. 跨平台,安装简单
  6. 最好还能结合数据大屏实现数据直观展示

可能遇到的困难

  1. 如何适配多种数据库?不知道好不好做
  2. 数据库账号密码的管理,安全问题
  3. 数据量大时的性能和效率问题
  4. 保存写的语句表结构设计,目前还没考虑清楚
  5. 数据库通常私密,存在内网。需要在不联网时使用,如果要考虑变现,如何实现授权?
  6. 一个优雅简洁好用的交互界面也很难设计
  7. 如何经营和商业变现?

设计思路(逐步补充)

程序定位
  1. 只做查询功能,不包含删改。因为该程序的一个重要的用户群体是非DBA人员。他们没有扎实的基础和思维,删改危害很大。
  2. 当然也适用于DBA人员,因为需求就是基于我自身写sql总结的困难。这个程序也应当比直接写sql效率高
  3. 该程序不是为了替代navicat之类的数据库可视化管理软件,毕竟仅仅只有查询功能。只是补强他们的查询能力。对于DBA人员,二者都需要。非DBA人员只需要该程序
程序架构

由于我后端主要写golang,前端写vue3,我也查了下go有没有其余好用的UI编程框架,热度最高的fyne就是依托答辩。其余热门的本质上也都是web加后端的模式,像wails又只支持Win10及以上。win7的用户量还是很大的。不能放弃。

所以根据我的技术栈,以及兼容性和跨平台的考虑,还是采用BS架构最合适。

具体方案
  1. golang做后端,负责逻辑处理,数据库查询操作,IO,静态资源代理等操作。
  2. vue3编写web界面。由go进行代理。
  3. 数据库保存用户数据。关系数据库搞得定,就采用mysql,搞不定就换nosql。具体还得等表结构设计明白再定

商业变现

这个我不擅长,总体两种方案:

开源模式

劣势
  1. 对技术能力的要求会比较高,毕竟开源了人家是要看你的代码。
  2. 如何防盗。就算我的开源协议选得严格点,不允许私自二开。但是架不住很多人和公司不讲武德,我也不可能有精力维权。
  3. 开源了如何经营变现?授权模式?
优势
  1. 利于宣传和推广
  2. 产品肯定更健壮
  3. 可以有其余程序员参与进来,减轻我的压力
  4. 安全性更被用户信任,毕竟代码经得起考验,数据库账号密码这么重要的东西是吧

不开源模式

也就是开源模式的优势劣势对调了。

个人倾向

  1. 我偏向于开源模式,因为我觉得我最大的困难的宣传和推广,没流量,程序再好用也是孤芳自赏,没有意义。如果能有人用,在考虑流量变现啥的也不迟。
  2. 也希望趁机磨练下自己的技术能力、架构设计能力和项目管理能力。毕竟没有亲自独立完成过大型项目。
  3. 希望全程公开写代码。然后可以开个直播,不在于赚钱,而是持续不断地曝光这个产品。从构思设计就开始,所以我才直接在博客上写这个专栏。

软件经营模式

提供两种版本:联网版和单机版

联网版
  1. 需要登录才能使用
  2. 免费版:功能全部免费使用(也许除了数据大屏展示功能,具体进一步构思)。但是不提供云端保存编程结果的功能,只能保存在本地。
  3. 收费版:在免费的基础上,提供云端存储功能。具体收费模式待定
  4. 一律不提供保存数据库密码的功能
  5. 包升级
单机版
  1. 功能全齐
  2. 适用于内网,没有免费版
  3. 收费模式按年,不包升级
  4. 绑定主机,一个授权码只能用于一台主机
  5. 单机版提供保存账号密码功能

目前只想到这么多,慢慢补充完善。另外, 业界有类似的软件和网站吗?没找到呀。欢迎指点,有好的思路想法,也期望不吝赐教!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/41447.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

上网行为管理系统是什么?有哪些好用的上网行为管理系统?

IT经理(ITM): 大家好,今天我们聚在这里,是为了讨论一个对我们公司来说越来越重要的议题:上网行为管理系统(WBS)。我们知道,员工的网络使用已经不仅仅是个人行为,它直接影…

序列化Serializable

一、传输对象的方式 将对象从内存传输到磁盘进行保存,或者进行网络传输,有两种方式: 实现Serializable接口,直接传输对象转成json字符串后,进行字符串传输 二、直接传输对象 implements Serializable Data Equal…

Java中的设计模式在实际项目中的应用

Java中的设计模式在实际项目中的应用 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 设计模式是解决软件设计中常见问题的经验总结,它们提供了一种…

resp 无法连接 redis 服务器

问题原因可能是:防火墙 防火墙对这个端口没有开放,所以主机访问不到 解决方法: 步骤1:开发指定端口号 #放通6379/tcp端口 firewall-cmd --zonepublic --permanent --add-port6379/tcp 步骤2:重启防火墙 firewall-c…

.netcore微服务——项目搭建

在.NET Core中,微服务是一种架构风格,它将应用程序构造为一组小型服务的集合,这些服务都通过HTTP-based API进行通信。每个服务都是独立部署的,可以用不同的编程语言编写,并且可以使用不同的数据存储技术。 微服务的主…

什么是网络抓取|常见用例和问题

你可能听说过数据被称为现代信息社会的新石油。由于线上信息量庞大,能够有效地收集和分析网页数据已经成为企业、研究人员和开发人员的关键技能。这就是网页抓取技术的用武之地。网页抓取,也称为网页数据提取,是一种强大的技术,能…

el-dropdown的command方法添加自定义参数

代码 <div v-for"(item, index) in queryParams.changeParams" :key"index"><el-form-item prop"dataConditionSearch"><el-dropdown command"handleCommand" style"margin-right: 3px;"><span class…

【python基础】—pip与conda的区别

文章目录 一、 pip 与 conda1、支持语言2、Repo源3、包的内容4、环境隔离5、依赖关系6、总结 二、pip install 与 conda install1、库的存储位置2、总结 三、pip uninstall 与 conda uninstall 一、 pip 与 conda 1、支持语言 pip 是 官方推荐的 python 包管理器&#xff0c;…

IDEA 2018提交Git之后撤销commit

1、选择项目——>右击git——>找到Repostiory——>执行rest head 2、编辑reset head 3、回退到上一个版本&#xff08;HEAD~1&#xff09;&#xff0c;点击reset即可&#xff0c;如果还想继续回滚&#xff0c;再次执行即可

Linux平台x86_64|aarch64架构如何实现轻量级RTSP服务

技术背景 我们在做Linux平台x86_64架构或aarch64架构的推送模块的时候&#xff0c;有公司提出这样的技术需求&#xff0c;希望在Linux平台&#xff0c;实现轻量级RTSP服务&#xff0c;实现对摄像头或屏幕对外RTSP拉流&#xff0c;同步到大屏上去。 技术实现 废话不多说&…

硬链接和软链接

在Linux系统中&#xff0c;链接&#xff08;Link&#xff09;是一种特殊的文件&#xff0c;它指向另一个文件或目录。链接分为两种类型&#xff1a;硬链接&#xff08;Hard Link&#xff09;和软链接&#xff08;也称为符号链接&#xff0c;Symbolic Link&#xff09;。 1. 硬…

在 Baklib Experience 中实现混合 CMS 架构

“还记得 CMS 主要用于在网页上布局内容吗&#xff1f;当时&#xff0c;这满足了网站管理需求。然而&#xff0c;行业正在发生变化&#xff0c;数字体验平台 Baklib Digital Content Experience 正在引领潮流。继续阅读以了解如何以及详细了解可用于确保全渠道成功的两个原则。…

Laravel全尺寸表单:简化Web开发中的表单处理

引言 Laravel是一个功能丰富的PHP Web框架&#xff0c;它提供了许多工具来简化开发过程&#xff0c;包括处理表单数据。Laravel的全尺寸表单功能允许开发者轻松创建、验证和管理表单数据&#xff0c;同时保持代码的简洁性和可维护性。本文将深入探讨Laravel全尺寸表单的工作机…

Spring Boot与MyBatis-Plus:代码逆向生成指南

在Spring Boot项目中使用MyBatis-Plus进行代码逆向生成&#xff0c;可以通过MyBatis-Plus提供的代码生成器来快速生成实体类、Mapper接口、Service接口及其实现类等。以下是一个简单的示例步骤&#xff1a; 代码逆向生成 1.添加依赖&#xff1a; 在pom.xml文件中添加MyBati…

python笔记和练习----少儿编程课程

第1课&#xff1a; 认识新朋友-python 知识点&#xff1a; 1、在英文状态下编写Python语句。 2、内置函数print()将结果输出到标准的控制台上&#xff0c;它的基本语法格式如下&#xff1a; print("即将输出的内容") #输出的内容要用引号引起来&#xff0c;可…

EtherCAT主站IGH-- 8 -- IGH之domain.h/c文件解析

EtherCAT主站IGH-- 8 -- IGH之domain.h/c文件解析 0 预览一 该文件功能`domain.c` 文件功能函数预览二 函数功能介绍1. `ec_domain_init`2. `ec_domain_clear`3. `ec_domain_add_fmmu_config`4. `ec_domain_add_datagram_pair`5. `ec_domain_finish`6. `ecrt_domain_reg_pdo_en…

pdfplumber vs PyMuPDF:PDF文本、图像和表格识别的比较

pdfplumber vs PyMuPDF:PDF文本、图像和表格识别的比较 1. 文本提取pdfplumberPyMuPDF 2. 图像提取pdfplumberPyMuPDF 3. 表格提取pdfplumberPyMuPDF 总结 在处理PDF文件时,提取文本、图像和表格是常见的需求。本文将比较两个流行的Python PDF处理库:pdfplumber和PyMuPDF(fitz)…

Linux——提取包文件到指定目录,命令解释器-shell,type 命令

- 提取包文件到指定目录 bash tar xf/-xf/-xzf 文件名.tar.gz [-C 目标路径] tar xf/-xf/-xjf 文件名.tar.bz2 [-C 目标路径] tar xf/-xf/-xJf 文件名.tar.xz [-C 目标路径] ### 示例 - 将/etc下所有内容打包压缩到/root目录中 bash [rootserver ~]# tar -cvf taretc…

Symfony 是一个用于构建PHP的框架

Symfony 是一个用于构建PHP应用程序的强大且灵活的框架&#xff0c;它采用了模型-视图-控制器&#xff08;MVC&#xff09;架构模式。Symfony 提供了一套丰富的工具和库&#xff0c;使得开发者可以快速开发健壮、高性能的Web应用。以下是关于Symfony的一些关键点&#xff1a; …

遗漏知识点

什么是RAII&#xff1f; RAII是Resource Acquisition Is Initialization&#xff08;wiki上面翻译成 “资源获取就是初始化”&#xff09;的简称&#xff0c;是C语言的一种管理资源、避免泄漏的惯用法。利用的就是C构造的对象最终会被销毁的原则。RAII的做法是使用一个对象&am…