Database design 第一个模型或数据库是什么?

Database design 第一个模型或数据库是什么?,database-design,class-design,Database Design,Class Design,我的问题是关于软件开发中应该首先做什么:数据库模型还是域模型?或者这些概念是相似的? 谢谢。这取决于你是数据库用户还是对象用户。每个人都会声称自己是至高无上的,并说自己的专长应该首先完成 两种观点我都不同意。你应该做的第一件事就是很好地理解你的问题。模型和模式将由此产生 无论做什么,都无法消除对象-关系不匹配阻抗。对象是基于实例的;SQL是基于集合的。您仍然会遇到问题。设计好的数据库和对象模型,并利用对象关系映射(ORM)层来解决阻抗不匹配问题(这就是它们的设计目的)。答案将在很大程度上取决于您

我的问题是关于软件开发中应该首先做什么:数据库模型还是域模型?或者这些概念是相似的?
谢谢。

这取决于你是数据库用户还是对象用户。每个人都会声称自己是至高无上的,并说自己的专长应该首先完成

两种观点我都不同意。你应该做的第一件事就是很好地理解你的问题。模型和模式将由此产生


无论做什么,都无法消除对象-关系不匹配阻抗。对象是基于实例的;SQL是基于集合的。您仍然会遇到问题。

设计好的数据库和对象模型,并利用对象关系映射(ORM)层来解决阻抗不匹配问题(这就是它们的设计目的)。

答案将在很大程度上取决于您正在开发的应用程序类型和您正在使用的语言/framworks。如果要在数据库中编写大量业务逻辑(如存储的进程、视图、触发器),那么首先设计数据库是有意义的。
如果您打算使用一些将域模型映射到数据库的框架(以及可能的模式生成,如hibernate),那么您将首先编写域类。

这场血战比海盗与忍者之间的血战更为久远。:)


在我看来,从领域模型开始首先有助于弥合功能需求和技术设计之间的差距。与数据模型相比,对象模型更好地表示业务数据,并且在项目早期,非技术性业务分析师和项目经理可以对其进行图解以更好地理解。

首先应该是概念设计(以利益相关者满意的术语描述问题领域),该模型是基于概念设计的逻辑设计。有一套相当全面的工具和技术用于从概念需求中导出对象模型。对于从概念到模式设计的映射,很少有常见的工具和技术。(我唯一熟悉的是对象角色建模,这是一个很好的方法。)然而,有很多好的方法可以使用对象模型来开发模式。所以我更喜欢概念模型而不是对象模型,而不是数据模型

看待这个问题的另一种方式是,如果开发数据库,那么应用程序往往会将用户变成为数据模型服务的数据收集代理,从而失去基于用户故事和用例的良好需求的价值(第二种需求似乎会变成CRUD)


注意:令人困惑的是,ORM(对象角色建模)与ORM(对象关系映射)无关。

海盗!忍者!鸡!蛋

每个项目都是不同的,有时,数据库的设计决定了任务的成功。现在,这是非常罕见的,因为硬件和软件都在向前发展——但如果您必须存储和计算大量数据,模式可能是您最关心的问题之一

大多数时候,挑战在于业务领域。我推荐“领域驱动设计”在这个主题上由Evans提出——但我鼓励您首先使用用例或用户故事来捕获业务领域;将它们转化为软件是关键的挑战,如果您和您的同事认为实体关系最好,那么就去做吧;如果您更熟悉类层次结构和责任图,那也很酷


我的印象是,这个行业正在转向对象,而不是表格——从职业角度看,这可能是一条可行的道路。

+1出于实用主义考虑。业务领域的第一个模型应该是纸面的,而不是SQL或某些类定义。然后,在您了解问题之后,我认为最好同时处理这两个模型,回到过去d在它们之间。是+1,独立设计(如果可能,由单独的人设计),然后使用ORM。不,ORM不会改变对象是基于实例的,关系是基于集合的。ORM只是让对象建模者假装它不存在。@duffymo-当然,ORM不会改变对象和关系之间的差异。正如您所说,它允许对象建模者假装它不存在“不存在。因此,如果使用ORM,那么这个问题的答案是,对象模型和数据库模型可以独立设计。不要混淆假装和现实。我故意选择了这个词。我认为值得指出的是,存储过程也可以将对象与模式分离,应该被视为另一种方式。”“如何让两者独立发展。@duffymo-同意ORM层并不能掩盖100%的差异,但事实上它们相当不错(而且一直在进步)。正如您所提到的,还有其他保持模型独立的策略。我认为这应该是目标,设计尽可能最好的模型,并利用技术在它们之间移动数据。有趣的是,我会说恰恰相反。@HLGEM,我羡慕您,因为与我一起工作的非技术人员无法理解数据模型诊断为了救他们的命。