我知道在Stack Overflow上已经广泛地讨论了normalis(z)。 我读过很多以前的讨论。 我还有一些额外的问题。 我正在使用至less有100个表的遗留系统。 数据库有一些不规范的结构,包含各种不同数据的表和其他问题。 我已经被赋予了改善它的任务。 我不能只是重新开始,但需要修改现有的架构。 在过去,我一直试图devise规范化的数据库。 现在的问题。 一位高级开发人员build议,在某些情况下,我们无法正常化: 1)具有时间数据。 例如,创build一个链接到产品的发票。 如果客户一年后要求提供此发票的复印件,我们必须能够生成原件的完整副本。 如果产品价格,名称或说明已更新,该怎么办? 这位资深人士build议将价格和其他产品信息复制到发票表中。 我想也许我们应该有另一个表,如productPrice有一个date字段,所以我们可以跟踪价格的变化随着时间的推移。 我想在产品描述和名称上需要同样的东西? 看起来很复杂。 你怎么看? 2)数据库是一个会计系统。 我对会计不是很熟悉。 目前一些汇总数据被导出并存储在数据库中。 例如,一年的总销售额。 我的高级助理指出,会计师喜欢检查的东西是正确的,通过比较这个价值与实际上从发票计算的数据,让他们有信心,应用程序是否正常工作。 他说,目前例如我们可以判断是否有人错误地删除了去年的发票,因为总数不会一样。 他还指出,在飞行中计算这些总数可能相当慢。 当然我说过,数据不应该重复,应该在需要的时候一直计算。 我build议我们可以使用SQL Reporting Services或其他解决scheme来生成这些报告并caching它们。 无论如何,他不相信。 对此有何评论? 非常感谢 :) 干杯 标记 编辑 感谢您的优秀回应。 可惜我只能标记一个作为答案,因为这里有很多好的build议。
我刚刚阅读了一篇关于微服务和PaaS架构的文章。 在那篇文章中,大约三分之一的时间,作者指出(在非规范化的疯狂下 ): 重构数据库模式,并将所有事情解除规范化,以便完全分离和分区数据。 也就是说,不要使用服务于多个微服务的基础表。 不应共享跨多个微服务的基础表,也不应共享数据。 相反,如果多个服务需要访问相同的数据,则应该通过服务API(例如发布的REST或消息服务接口)共享。 虽然这在理论上听起来很棒,但实际上却有一些要克服的严重障碍。 其中最大的是,数据库通常紧密耦合,每个表与至less一个其他表有一些外键关系。 因此,将数据库划分成n 个微服务控制的子数据库是不可能的。 所以我问: 给定一个完全由相关表组成的数据库,如何将这个数据库非规范化为更小的片段(表格组),以便片段可以被单独的微服务控制? 例如,给出以下(相当小但是示例性的)数据库: [users] table ============= user_id user_first_name user_last_name user_email [products] table ================ product_id product_name product_description product_unit_price [orders] table ============== order_id order_datetime user_id [products_x_orders] table (for line items in the order) ======================================================= products_x_orders_id product_id order_id quantity_ordered 不要花太多的时间来批评我的devise,我是这样做的。 关键是,对我来说,把这个数据库分成3个微服务是合乎逻辑的: UserService – 用于系统中的用户 应该最终pipe理[users]表; 和 ProductService […]
我想知道是否将数组存储在数据库中是一个好习惯? 我倾向于使用json_encode而不是serialize ,但只是想知道这是一个好主意。 如果没有,那么我可以做一些小的改变,只是用逗号来打乱数组。
我正在做一些数据库研究,我正在关注关系数据库的一些限制。 我得到的是大桌子的连接是非常昂贵的,但我不完全确定为什么。 DBMS需要做什么来执行连接操作,瓶颈在哪里? 如何反规范化有助于克服这一代价? 其他优化技术(如索引)如何提供帮助? 个人经验值得欢迎! 如果您要发布资源链接,请避开维基百科。 我知道哪里可以find。 与此相关,我想知道像BigTable和SimpleDB这样的云服务数据库使用的非规范化方法。 看到这个问题 。