【发布时间】:2010-02-14 02:37:02
【问题描述】:
我们的开发小组就实体的组合是否应该驱动数据库设计,还是应该由数据库设计驱动实体的组合进行了相当多的讨论。
对于那些处理过这个问题的人,您的理念是什么?当然,并不是每个实体都 1:1 映射到数据库表。但是,对于那些这样做的人,您是如何处理的? IOW,哪个先来数据库表再对应实体还是先实体再数据库表持久化呢?
谢谢。
【问题讨论】:
标签: c# sql-server linq-to-sql orm entity
我们的开发小组就实体的组合是否应该驱动数据库设计,还是应该由数据库设计驱动实体的组合进行了相当多的讨论。
对于那些处理过这个问题的人,您的理念是什么?当然,并不是每个实体都 1:1 映射到数据库表。但是,对于那些这样做的人,您是如何处理的? IOW,哪个先来数据库表再对应实体还是先实体再数据库表持久化呢?
谢谢。
【问题讨论】:
标签: c# sql-server linq-to-sql orm entity
“实体,然后是一个数据库表来持久化它”
实体是您的程序操作的对象。这就是正在处理的内容的本质。
该实体的数据库表示(如平面文件表示或 GUI 表示)只是实体的方便表示。
当涉及到关系数据库特别不擅长的某些事情时,您可能需要考虑一下 DB 表示。例如,多对多关系需要引入一个额外的表,因为数据库具有您的对象模型所没有的限制。您可能有一些实体设计注意事项来解决这个问题,但这些都是很容易理解的。
数据库不太重要。
实体定义是核心和必要的。
【讨论】:
您的数据库可能会比您今天构建的任何应用程序寿命更长。所有性能和可扩展性都将由您的数据库模式驱动。完善的数据库模型是构建任何应用程序的基础,我想说的是,您应该在设计和测试方面投入最多的精力,因为它会带来最大的好处。
话虽如此,您的应用程序当然更喜欢操纵领域实体,而操纵由关系理论驱动的非自然实体而不是业务实体只会使事情复杂化。我的观点是,ORM的作用就是尽可能地匹配这两者。但是,无论何时出现不可避免的冲突,都应该由您的性能和可扩展性的驱动因素来给予优先权:数据库模式。
【讨论】:
我会说你构建了你的逻辑数据模型,并构建了与之对应的数据库和对象。
其实我会质疑数据库表和对应实体不能对应的假设。我很少见过他们真的做不到的情况(如果您从头开始构建应用程序)。另外,我想说的是,每次对象模型和数据库模式出现分歧时,都会带来很多问题。
我再次想到,如果你让它们始终匹配,一切都会变得更简单,无论这可能是异端。
【讨论】: