什么时候值得使用数据库?

2024-04-08

我有一个与数据库有关的问题,以及什么时候值得深入研究。我主要是一名嵌入式工程师,但我正在使用 Qt 编写一个应用程序来与我们的控制器交互。

我们正处于一个奇怪的境地,我们有足够的数据,可以实现一个数据库(大约 700 多个项目并且还在不断增长)来管理所有内容,但我不确定现在是否值得花时间来处理。我使用从 Excel 生成并解析的文件来实现 GUI 没有任何问题,但即使使用 VBA 脚本,它也会变得乏味且难以跟踪。我一直在尝试使用 Microsoft Access 将我们的数据转换为应用程序端更易于管理的数据,这似乎运作良好。如果成功的话,我距离使用 SQL 数据库和使用 Qt 库访问和修改它只有一步(或几步)了。

我没有太多管理此级别数据的经验,并且很好奇解决此问题的最佳方法是什么。那么在这种情况下使用数据库的真正好处是什么?我意识到其中大部分内容可能是非常特定于应用程序的,但是关于如何跨越嵌入式/应用程序编程线的一些一般想法和建议将会有所帮助。

这并不是将数据库放入嵌入式项目中。它也不是通常使用较大数据库的业务类型应用程序。我正在为桌面上的单个用户设计一个 GUI,以便与微控制器交互以进行监控和配置。


我决定使用 SQLite。您可以使用数据做一些非常有趣的事情,而我在第一次启动这个项目时并没有真正考虑过这些选项。


在以下情况下数据库是有价值的:

  1. 您的应用程序演变为一些 数据驱动执行的形式。
  2. 你花时间设计和 开发外部数据存储 结构。
  3. 在应用程序之间共享数据或 组织(包括个人 人们)
  4. 数据不再短小 简单的。
  5. 数据重复

向数据驱动执行的演变
当数据发生变化但执行没有变化时,这是数据驱动程序的标志,或者程序的部分内容是数据驱动的。一组配置选项是数据驱动功能的标志,但整个应用程序可能不是数据驱动的。无论如何,数据库可以帮助管理数据。 (数据库库或应用程序不必像 Oracle 那样庞大,但可以像 SQLite 那样精简和精简)。

外部数据结构的设计与开发
将问题发布至堆栈溢出有关序列化或转换树和列表以使用文件的信息很好地表明您的程序已升级到使用数据库。此外,如果您花费大量时间设计将数据存储在文件中的算法或设计文件中的数据,那么也是研究数据库使用的好时机。

共享数据
无论您的应用程序是与另一个应用程序、另一个组织还是另一个人共享数据,数据库都可以提供帮助。通过使用数据库,更容易实现数据一致性。问题调查中的一大问题是团队没有使用相同的数据。客户可能使用一组数据;验证团队使用不同的数据集进行开发。数据库使数据的版本控制变得更加容易,并允许实体使用相同的数据。

复杂数据
程序开始时使用硬编码数据的小表。这演变成了将动态数据与地图、树和列表一起使用。有时数据会从简单的两列扩展到 8 列或更多。数据库理论和数据库可以减轻组织数据的复杂性。让数据库来管理数据并释放您的应用程序和开发时间。毕竟,数据的管理方式并不重要,重要的是数据的质量及其可访问性。

数据重复
很多时候,当数据增长时,重复数据的吸引力就会越来越大。数据库和数据库理论可以最大限度地减少数据的重复。数据库可以配置为针对重复发出警告。

转向使用数据库需要考虑许多因素。其中包括但不限于:数据复杂性、数据重复(包括部分数据)、项目截止日期、开发成本和许可问题。如果您的程序可以使用数据库更有效地运行,那么就这样做。数据库还可以节省开发时间(和金钱)。除了管理数据之外,您和您的应用程序还可以执行其他任务。将数据管理留给专家。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么时候值得使用数据库? 的相关文章

  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • APEX 安装失败,PLS-00201:必须声明标识符“SYS.DBMS_DB_VERSION”

    尝试在 Oracle XE 18c 数据库上安装 Oracle APEX 20 2 如下官方说明 https docs oracle com en database oracle application express 20 1 htmig
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • Qt 支持 Windows 蓝牙 API 吗?

    谁能告诉我 Qt 是否支持 Windows 蓝牙 API 如果是这样 您能否分享一些有关如何使用它的信息 自上次答复以来 这个问题的答案发生了一些变化 Qt 5 2 版为 Linux BlueZ 和 BlackBerry 设备实现了蓝牙 A
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 将古吉拉特语文本插入 MySQL 表会产生垃圾字符和不可读的文本

    我有三个 MySQL 表 我正在向其中插入古吉拉特语内容 当我插入两个表时 它们插入得很好并且可读 但在一个表中 它显示垃圾字符 不可读的文本 我怎样才能解决这个问题 MySQL 有每个表的字符集设置 http dev mysql com
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • 使用 where 进行 select 语句时,HSQLDB 用户缺乏权限或未找到对象错误

    我的数据库使用 SQuirrel SQL 客户端版本 3 5 3 和 HSQLDB 我已经能够为其指定相应的驱动程序 内存中 并创建一个别名 我创建了一个表 CREATE TABLE ENTRY NAME VARCHAR 100 NOT N
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • Laravel leftJoin 仅右表的最后一条记录

    我是 Laravel 的新手 我有两张桌子 1 产品 2 价格 products id product int p key name varchar prices id price int p key id product int
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 对多个数据库执行 SQL 查询

    我知道我的帖子与该论坛中的其他帖子的标题非常相似 但我真的找不到我需要的答案 这是我的问题 我的 Windows Server 上运行着 SQL Server 在我的 SQL Server 中 我有大约 30 个数据库 它们都具有相同的表和
  • 将第三个表链接到多对多关联中的桥接表

    设计这个数据库的正确方法是什么 这是我设置表格的方式 我在名为 教师 的表和名为 仪器 的表之间存在多对多关系 然后我有一个连接两者的桥接表 我想将另一个表与 BRIDGE 表关联起来 意思是乐器 老师的组合 该表有 3 行 指定老师可以教
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • 当容器大小调整时如何重绘此处地图?

    今天我遇到了一个以前没有遇到或注意到的特殊问题 在 Here Maps 3 0 中设置地图时 我注意到 如果浏览器窗口 小 小于全屏 则在加载地图期间 即使将浏览器窗口大小调整为全屏的 如何更新此处地图的地图大小以占据分配的空间 我的安排如
  • 如何将存储库注入到工作单元?

    我已经实现了我的 UnitOfWork 以便它保留对所有存储库的引用 public interface IUnitOfWork void Commit void RollBack public interface IMyUnitOfWork
  • 如何停止 GHCi 中的无限评估?

    当我运行类似的东西时 Prelude gt cycle ab I can see an infinite printing of ab To stop it I just use Ctrl c And it works 当我跑步时 Prel
  • AWS:为 Cognito 触发器指定 Lambda 版本

    我有一个 Cognito 用户池和相应的身份池 我想调用 Lambda 函数的特定版本Post authentication或类似的其他触发器 尽管示例都有版本号 但我在控制台中没有看到指定版本代码的选项 http docs aws ama
  • 什么是代数数据类型 (ADT)?

    我听到人们在函数式编程中谈论了很多代数数据类型 不要与 抽象数据类型 混淆 我所知道的是 ADT 指的是某种复合 通常是递归 数据类型 例如树或数学表达式 In 维基百科 https en wikipedia org wiki Algebr
  • 关于外连接的默认/填充值

    以下是我正在使用的更大 复杂数据帧的微小 玩具版本 gt gt gt A key u v w x 0 a 0 757954 0 258917 0 404934 0 303313 1 b 0 583382 0 504687 NaN 0 618
  • 如何将非连续数字添加到范围中?

    我试图迭代范围 750 765 并添加非连续数字 769 770 774 如果我尝试在范围函数之后添加数字 它会返回范围列表 然后是各个数字 gt gt gt for x in range 750 765 769 770 774 print
  • 样式表被汉字接管/替换

    好吧 有些事情变得疯狂了 除非中国从我的 iepage 上的测试 style css 文件开始接管 好吧 我猜他们一开始就讨厌 IE 但无论如何 它加载时没有样式表 悲伤 我进入 Web 检查器 看到所有链接的文件都充满了 可能 中文字符
  • 无法初始化私有常量成员[重复]

    这个问题在这里已经有答案了 我想要一个int与我的类相关联 该类在该类的用户实例化它时设置 class MyClass public MyClass int x private const int x 为了不断初始化它 我尝试使用构造函数
  • 无法运行 XAMPP - MySql

    当我尝试启动 XAMPP MySql 时 它不起作用 我已经尝试修复它 但我找不到任何实际的解决方案 我希望你能找到问题所在 有日志 2019 06 26 9 08 35 0 Note InnoDB Mutexes and rw locks
  • 为了速度/性能什么时候应该、不应该脱离 OOP?

    在 Android 开发者文章中 Google 指出 您通常应该声明公共变量 而不是带有 getter 和 setter 的私有变量 以增强嵌入式设备的性能 我认为函数调用比仅仅写入地址更昂贵 我想知道 应该在多大程度上牺牲性能来坚持 OO
  • 如何在列表框中设置对齐格式

    我将值添加到列表框 for int i 0 i lt 2 i lbBeamValue Items Add Beam i ToString value1 i Angle i ToString value2 i 显示如下 Beam 0 0 12
  • 仅保留 JavaScript 对象中的某些属性

    我有一个对象 我想通过删除除某些特定属性之外的所有属性来修改对象 而不是克隆它 例如 如果我从这个对象开始 var myObj p1 123 p2 321 p3 p3 1 1231 p3 2 342 p4 23423 p99 p99 1 s
  • 截断分页中的页数

    这可能是一个非常愚蠢的问题 但我想不出任何可以帮助我走得更远的东西 我希望缩短页面导航中的数字数量 而不是像 1 2 3 4 5 6 7 8 我希望它像 1 2 7 8 当我去2 数字3现在应该可以在数字组中看到 这是我负责页码的代码 di
  • MySQL 最大用户连接数与最大连接数

    可悲的是 我在任何地方都找不到对此查询的任何直接解释 甚至在 MySQL 文档中也找不到 各个论坛上的一些人说 max user connections 永远不能大于 max connections 例如 如果一个用户有3 max user
  • mutableStateOf 和 mutableStateListOf 有什么区别?

    在与一个ViewModel and a List存储在那里 我通常遵循这种方法 var characteristics by mutableStateOf listOf
  • Emacs、Vim 和 JEdit 中哪些编辑器支持同时多个文本插入点?

    背景 JEdi t 以及其他一些文本编辑器 支持称为多个同时文本插入点 http groups csail mit edu uid projects simuledit usenix01 html 至少我在这里这么称呼它 要了解这意味着什么
  • 使用 STM32 USB 设备库将闪存作为大容量存储设备

    我的板上有这个闪存IC 它连接到我的STM32F04 ARM处理器 处理器的USB端口可供用户使用 我希望我的闪存在通过 USB 连接到 PC 时被检测为存储设备 作为第一步 我在程序中将 USB 类定义为 MSC 效果很好 因为当我将主板
  • Laravel 5 - Php artisan 语法错误

    我目前正在使用 Laravel 5 开发一个应用程序 突然工匠停止工作了 我无法对其使用单个命令 它总是返回错误 Symfony Component Debug Exception FatalErrorException syntax er
  • 什么时候值得使用数据库?

    我有一个与数据库有关的问题 以及什么时候值得深入研究 我主要是一名嵌入式工程师 但我正在使用 Qt 编写一个应用程序来与我们的控制器交互 我们正处于一个奇怪的境地 我们有足够的数据 可以实现一个数据库 大约 700 多个项目并且还在不断增长