Database 哪个更重要?数据库设计还是编码?

Database 哪个更重要?数据库设计还是编码?,database,database-design,Database,Database Design,哪个更重要:数据库的设计?还是应用程序代码的设计 有很多关于可重用代码的信息(来自Carl Franklin等人),但我没有看到太多关于数据库设计及其对应用程序生命周期的影响的信息(尤其是早期糟糕的设计决策会对应用程序的“生命周期”产生多大的影响。如果你对其中任何一个都不小心,那么你就注定要失败。简短回答:两者都有。这条链条和最薄弱的一环一样牢固。取决于你对……和产品要求的了解程度 忽视任何一方,您的产品都可能陷入麻烦 这就是说,我倾向于遵循DDD风格的编码,首先定义除数据库之外的所有内容,这让

哪个更重要:数据库的设计?还是应用程序代码的设计


有很多关于可重用代码的信息(来自Carl Franklin等人),但我没有看到太多关于数据库设计及其对应用程序生命周期的影响的信息(尤其是早期糟糕的设计决策会对应用程序的“生命周期”产生多大的影响。

如果你对其中任何一个都不小心,那么你就注定要失败。

简短回答:两者都有。这条链条和最薄弱的一环一样牢固。

取决于你对……和产品要求的了解程度

忽视任何一方,您的产品都可能陷入麻烦

这就是说,我倾向于遵循DDD风格的编码,首先定义除数据库之外的所有内容,这让我更好地了解需要存储哪些数据


然后,一旦完成,我就可以创建数据库并将其调整为套件。

如果您是DBM,请进行设计

如果你是一名程序员,那么就编写代码

这些不是相互排斥的,都应该很好地执行。

两者


优秀的代码可能会被糟糕的数据库设计毁掉,而优秀的数据库设计也可能会被糟糕的代码毁掉。

我不认为你可以用你描述的方式将两者分开。一个总是会影响另一个。例如,一个易于维护且性能良好的可靠数据库设计意味着更少的代码更改。好吧,architected代码和对用例的深刻理解将产生一个整洁且可维护的数据库模式


为了我的钱,我会花更多的钱在坚实的业务层上,并建立我的数据库来支持它,但这是我的知识偏见。

它们并不是相互排斥的。两者都必须坚如磐石,才能有机会获得坚如磐石的解决方案。

从某种意义上说,你不能将两者分开:数据库设计是在编码——它只是不是在程序lan中编码量规


然而,我曾经使用过设计糟糕的程序软件的系统,也曾经使用过设计糟糕的数据库模式(schemata?)的系统。根据我的经验,由于升级和兼容性问题,修复架构要困难得多。我可以想象系统中可能没有这种情况。

一般来说,数据库结构更重要,因为它提供了开发代码所依据的结构框架。一般来说(而且YMMV相当重要),在完成一个开发阶段后重构数据库结构比简单地重构依赖于稳定数据库的代码要困难得多。原因很简单;重构数据库结构通常会强制更改代码;反之则很少

很简单,您的代码对数据库的依赖大于数据库对代码的依赖。(如果不是这样,您可能需要重新考虑您的设计。)


为了解决你的编辑问题,我认为很多人对这类问题的写/写往往来自“编码”方面,这些类型的人倾向于认为数据库设计是微不足道的,而且比编码有趣的解决方案更有趣。本质上,对于那些喜欢解决棘手问题的人来说。(大多数人都喜欢写博客),编码方面比基本设计问题更有趣。虽然基本设计问题并不“性感”,但它们非常重要(数据库设计是一个非常基本的设计问题).

这两个都只是实现的一部分,当然,您需要花费大量的前期时间—需求和设计。

我同意这两个都是关键的,但是您可以在视图、函数和存储过程级别使用大量技术来弥补相当可怕的底层模式错误呃,如果你的编码不好,除了修复它之外,当然,在设计层面上你无法做太多的事情来修复它。

如果你不确定你在这两个方面的技能,那么就尽可能地将它们分开。最坏的情况是写一个混乱的东西,以后很难纠正或维护。

有两个我以前对一个骇人听闻的数据库设计感到震惊,我必须把我的帽子放在数据库(或数据模型/ORM)设计圈中

与公司/客户中了解问题领域的一些人聚在一起,获取纸面上所需的所有数据,并按逻辑区域进行分组,然后您将开始形成一个数据模型,您可以将其转换为对象、数据库模式或.xsd等。每个数据项都有一个名称、一种类型,可能是st的最大长度环,或是具有一定最小或最大容量的集合、列表或地图

不管您是在这之后首先设计数据库,还是OO模型,都取决于您,但至少您在前期努力获得一个合理的分区模型

事实上,在MVC设计中,我会将OO数据模型(Java/C#中的类)归类为模型,并与数据库模式有内在联系(当然还有附加的瞬态和实用方法)在您的问题中-应该真正使用通过DAO/ORM从数据库中提取的对象所表示的模型来实现业务逻辑。

这是我的经验(我参与解决数据库问题大约30年,处理过数百个不同的数据库)数据库性能中有太多的问题都是由于不适当地尝试重用代码造成的。函数的速度远远慢于内联代码。重用一次插入一条记录的存储过程的游标的速度非常非常非常非常快(光年)比基于集合的代码慢。重复使用返回所需内容的过程和十个其他字段会浪费服务器和网络资源。使用现有视图连接到十个表(当您只需要其中三个表的信息时)会浪费服务器资源。数据库中的代码重复使用远不如