Database design 类设计与数据库设计(ER图)

Database design 类设计与数据库设计(ER图),database-design,class-design,Database Design,Class Design,在系统开发的设计阶段,是类设计决定db的设计,还是db设计决定类设计。我意识到有几种情况下,其中一种或另一种已经存在,并且必须围绕现有的设计另一种。但是,如果你可以从头开始,哪种方法更好?我首先更倾向于课堂设计,然后是DB,但我想了解一些关于这个想法的信息。需要考虑哪些尺度问题?实现问题?只要由我决定,我几乎总是从数据库设计开始 如果你有一个不正确或设计不好的程序,在最坏的情况下,你总是可以扔掉那一个程序并重新编写它。但是,如果您的数据库不正确或设计不当,当您意识到有问题时,可能会有数百个程序使

在系统开发的设计阶段,是类设计决定db的设计,还是db设计决定类设计。我意识到有几种情况下,其中一种或另一种已经存在,并且必须围绕现有的设计另一种。但是,如果你可以从头开始,哪种方法更好?我首先更倾向于课堂设计,然后是DB,但我想了解一些关于这个想法的信息。需要考虑哪些尺度问题?实现问题?

只要由我决定,我几乎总是从数据库设计开始

如果你有一个不正确或设计不好的程序,在最坏的情况下,你总是可以扔掉那一个程序并重新编写它。但是,如果您的数据库不正确或设计不当,当您意识到有问题时,可能会有数百个程序使用该数据库。更改数据库至少意味着研究使用它的每个程序,而严重的数据库设计更改很可能意味着大量修改使用数据库的每个程序。因此,数据库的良好设计比程序的良好设计更为重要

课堂设计是否应该规定 数据库的设计,还是数据库的设计 设计决定课堂设计

我不确定其中一个应该决定另一个的设计。口述意味着紧密耦合,这通常是一件坏事

数据库设计假定其他程序将访问数据库。数据库设计的一个重要部分是选择好的表名、列名和完整性约束。所有这些都是数据库公共界面的一部分。(所有这些都与标准化有关,标准化是应用程序开发缺乏的基于数学的过程。这是一种观察,而不是批评。)


改变一个设计糟糕的公共界面真的非常昂贵

您的数据库应该经过深思熟虑,但应用程序和数据库设计都不应该严重影响其他应用程序和数据库设计。您的应用程序应该与数据库无关。要存储应用程序数据,您应该依赖一个层,该层提供从域对象到数据库表的必要转换。

很大程度上取决于应用程序,我认为。如果您的应用程序非常注重数据,那么您应该更喜欢数据库而不是应用程序设计;如果您的应用程序主要是关于业务逻辑或计算的,那么您可能希望支持应用程序设计

另一个考虑因素是应用程序的寿命和覆盖范围——正如Jay所说,多个应用程序使用同一个数据库并不罕见。尽管我实际上认为这是向数据库提供基于服务或消息的接口的原因,但我认为您不希望允许多个应用程序直接访问数据。在这种情况下,我认为您应该将设计工作重点放在服务层上

您还可以考虑将设计映射到业务领域——理想情况下,您希望您的软件反映业务概念(请参阅Evans的“域驱动设计”)。当使用对象技术而不是实体关系模型时(经典问题是如何将继承映射到数据库模型),这通常(但并不总是)更容易


最后,重要的是考虑团队的技能和倾向-有一组数据库专家设计一个对象模型通常会导致一个陡峭的学习曲线(反之亦然)。我所在的上一家《财富》500强企业的OLTP数据库中有超过25种语言编写的应用程序。从A到T(据我所知——汇编程序到Tcl/Tk)的一切都是有意义的。在功能和数据类型方面,Db往往是最低的公分母。类在数据操作方面的能力更强,并且可以适应数据库。非常有洞察力,真的很好,先生。:)联轴器上的点很好。我的意思是,如果您设计一个类来处理某个日期数据类型或对象,那么一个有能力的数据库也应该将其作为日期字段,因为该类就是这样设计的。相反,如果db设计为接受日期作为字符串,则类必须设计为接受日期作为字符串,并尝试进行日期转换。@hydroparadise大多数应用程序都有一个单独的层,处理从应用程序语言中的数据类型表示到数据库中的数据类型表示的转换。这允许应用程序和数据库使用最自然的数据类型。PHP有助于促进这种映射的原则,Java有Hibernate。所以让我直截了当地说,假设一个应用程序连接Ms Sql Server和Oracle,那么每个与Db和应用程序交互的连接都应该有一个单独的层?这些层是作为框架工具提供的(正如您之前对Catcall的回答所做的评论所收集的),还是因为可以存在多个实现组合,所以这通常是一个已开发的组件?