设计自动化数据库的最佳解决方案? [复制]

Posted

技术标签:

【中文标题】设计自动化数据库的最佳解决方案? [复制]【英文标题】:The best solution for designing a automation database? [duplicate] 【发布时间】:2019-06-27 06:26:24 【问题描述】:

在位于本地服务器上的大型自动化系统中,以一对多关系实现信息的最佳方式是什么? 获取报告并记录它是系统最重要的一点。

例如,假设一家旅行社有几个导游每周进行一次旅行。记录机构信息,最好的方法是使用三张表,一张存储机构信息,一张存储个性化导游信息,一张存储关系(一对多)但是这样,改变了本周将进行旅行的人的导游信息会发生变化,因此从系统收到的报告也会发生变化。 另一种存储方法是使用一个表,其中存储了机构的信息,而人的信息也以json格式存储在列中。例如,考虑下表。

代理表: 代理ID |姓名 |电话号码 |地址 | guides_details (存储在此列中的信息以 json 格式存储,例如姓名、手机和 ....)

现在我的问题是: 鉴于项目的存储大小并不重要(由于在本地服务器上使用),第二种方法是否适合大规模信息存储(归档)?或者,如果有其他存档方式,请教我。

【问题讨论】:

【参考方案1】:

通常,如果 JSON 数据可以以表格格式表示,则将其存储在表格中是一种不好的做法。这样做的原因是您无法轻松地用您的数据库语言查询这些详细信息。

我建议以下表格:

代理表

agency_id | (任何其他静态信息)

机构明细表

agency_detail_id | agency_id |创建日期 |姓名 |电话号码 |地址 | (任何其他可更改的细节)

指南表

guide_id | (任何其他静态信息)

指南详情表

guide_detail_id | guide_id |创建日期 |电话 |电子邮件 | (任何其他可更改的细节)

旅游桌

tour_id |姓名 |日期 | agency_detail_id | guide_detail_id

推理:

代理和导游的详细信息表将允许您为不同的旅行保留每个代理和导游的不同版本,并允许您保留将记录链接回该旅行所属的代理或导游的能力,即使细节不同。

我们已将指南详细信息分解为一个表格,以便于查询。

【讨论】:

tnx,是的,这是最好的方法,但是当更新指南或代理数据时,旅游信息的历史记录会发生变化, @MohamadMahdiRezaei 我已经更新了答案以解决您所指的问题。 Tnx,你说的难点在于它的编码时机。虽然json方法的耗时要少得多,但是json方法除了搜索困难之外还有其他缺陷吗?在运行程序的速度和... @MohamadMahdiRezaei 除了不能用数据库语言查询之外,JSON 作为列值并没有真正的缺点。使用 JSON 作为指南详细信息的困难(在您的情况下)是很难确定同一指南是否进行了多次旅行并找到该单一指南所做的旅行。我通过将指南表与细节分开来解决这个问题。如果这对您无关紧要,那么我想您可以将其存储为 JSON。就速度而言,处理 JSON 可能比使用数据库层的查询要慢,但这取决于您的设置。

以上是关于设计自动化数据库的最佳解决方案? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在具有多个数据库的域驱动设计DDD上添加项目的最佳方法是什么?

如何设计将数据从Excel迁移到Azure SQL Server的最佳解决方案? [关闭]

消息队列实现复制的最佳实践

微服务架构下的自动化测试全链路设计思路分析

C# - 使用部分类还是单独类? [复制]

App 后台架构设计方案 设计思想与最佳实践