Database design 什么是基于循环的编程?
这不是开玩笑 我与一位DBA合作定义一个数据模型,他反驳了我的一些建议,说“早在我们有‘基于循环’的编程之前”或“基于循环的数据模型” 我的建议是简化一些关系,因为我们正在使用实体框架(一种基于模型==表模式的ORM) 我想知道他那是什么意思Database design 什么是基于循环的编程?,database-design,Database Design,这不是开玩笑 我与一位DBA合作定义一个数据模型,他反驳了我的一些建议,说“早在我们有‘基于循环’的编程之前”或“基于循环的数据模型” 我的建议是简化一些关系,因为我们正在使用实体框架(一种基于模型==表模式的ORM) 我想知道他那是什么意思 感谢您迄今为止的回答,但它绝对不是sql“基于集”的vs游标,而是while循环 作为回应,我说“我不知道这意味着什么”,他从来没有给出答案,只是放弃了部分反对意见。我可以推断,他指的是基于循环的编程,不同于基于集合的编程,这是使用SQL编写代码的更好
感谢您迄今为止的回答,但它绝对不是sql“基于集”的vs游标,而是while循环
作为回应,我说“我不知道这意味着什么”,他从来没有给出答案,只是放弃了部分反对意见。我可以推断,他指的是基于循环的编程,不同于基于集合的编程,这是使用SQL编写代码的更好方式 例如,在基于循环的心智模型中,您可以通过运行查询、逐个获取行、更改字段值并将每一行发回数据库来更改一组行。这将运行N+1 SQL查询来更改N行。这通常是使用诸如实体框架或活动记录之类的ORM工具的结果 在基于集合的心智模型中,您可以使用单个SQL
UPDATE
语句在一个操作中更改所有行。您不必将任何数据取回应用程序,这一切都发生在数据库服务器上。您只需要运行一条SQL语句。这更有效,但大多数ORM工具都不支持这种技术(除非允许您绕过ORM直接执行自定义SQL)
来自其他人的评论:我们可以为我们认为的“基于循环”的意思找到答案,但这永远无法回答您的同事所说的意思。如果他退缩,那么他可能不知道如何更清楚地表达自己的想法。如果是这样的话,你永远不会知道他是什么意思
现在的规则比这更聪明,我想听听一些例子。我并没有否认这一点——我真正感兴趣的是一个ORM示例,它可以对尚未获取的行调用更新。也就是说,在“ORMish”接口中,而不是通过破坏抽象 我可以推断,他指的是基于循环的编程,不同于基于集合的编程,后者是使用SQL编写代码的更好方法 例如,在基于循环的心智模型中,您可以通过运行查询、逐个获取行、更改字段值并将每一行发回数据库来更改一组行。这将运行N+1 SQL查询来更改N行。这通常是使用诸如实体框架或活动记录之类的ORM工具的结果 在基于集合的心智模型中,您可以使用单个SQL
UPDATE
语句在一个操作中更改所有行。您不必将任何数据取回应用程序,这一切都发生在数据库服务器上。您只需要运行一条SQL语句。这更有效,但大多数ORM工具都不支持这种技术(除非允许您绕过ORM直接执行自定义SQL)
来自其他人的评论:我们可以为我们认为的“基于循环”的意思找到答案,但这永远无法回答您的同事所说的意思。如果他退缩,那么他可能不知道如何更清楚地表达自己的想法。如果是这样的话,你永远不会知道他是什么意思
现在的规则比这更聪明,我想听听一些例子。我并没有否认这一点——我真正感兴趣的是一个ORM示例,它可以对尚未获取的行调用更新。也就是说,在“ORMish”接口中,而不是通过破坏抽象 也许他指的是在存储过程中避免循环 在Transact-SQL中使用循环通常是不好的做法,SQL可以在没有循环的情况下快速检索数据 也许他指的是一个有多个孩子的实体。当实体的一个实例被创建时,它的子对象在一个循环中被检索,而不是通过一个查询,我们经常在ORM中看到这一点。但我们可以告诉他们避免这种情况
希望这有帮助也许他指的是避免存储过程中的循环 在Transact-SQL中使用循环通常是不好的做法,SQL可以在没有循环的情况下快速检索数据 也许他指的是一个有多个孩子的实体。当实体的一个实例被创建时,它的子对象在一个循环中被检索,而不是通过一个查询,我们经常在ORM中看到这一点。但我们可以告诉他们避免这种情况
希望这能有所帮助我的猜测是,他指的是经典ASP中的方式,其中有一个记录集对象,您可以循环查询结果以呈现页面。我看不出这与创建一个好的模式有什么关系。我的猜测是,他指的是在经典ASP中的方式,其中有一个记录集对象,您将循环查询结果以呈现页面。不过,我不明白这与创建一个好的模式有什么关系。从你的问题来看,他似乎是说你应该避免基于集合的操作,因为它们是“在我们使用基于循环的编程之前”的老方法 这就像是在狮子面前晃红肉——如果他真的这么说的话 所以-挑战他。“你是什么意思?-你是说使用游标吗?”“你是说数据库中数据的‘基于循环’(实际上是基于游标的)操作比基于集合的操作好吗?-反之亦然?”如果他实际上是说你应该学习SQL固有的基于集合的方法,那么你很可能会从这个家伙那里学到一些东西。如果他对许多orm中固有的折衷方式很了解(即使他们足够聪明,不只是将所有内容都转移到循环检索记录的操作中),那么你肯定可以向他学习一些东西