Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database design 什么是基于循环的编程?_Database Design - Fatal编程技术网

Database design 什么是基于循环的编程?

Database design 什么是基于循环的编程?,database-design,Database Design,这不是开玩笑 我与一位DBA合作定义一个数据模型,他反驳了我的一些建议,说“早在我们有‘基于循环’的编程之前”或“基于循环的数据模型” 我的建议是简化一些关系,因为我们正在使用实体框架(一种基于模型==表模式的ORM) 我想知道他那是什么意思 感谢您迄今为止的回答,但它绝对不是sql“基于集”的vs游标,而是while循环 作为回应,我说“我不知道这意味着什么”,他从来没有给出答案,只是放弃了部分反对意见。我可以推断,他指的是基于循环的编程,不同于基于集合的编程,这是使用SQL编写代码的更好

这不是开玩笑

我与一位DBA合作定义一个数据模型,他反驳了我的一些建议,说“早在我们有‘基于循环’的编程之前”或“基于循环的数据模型”

我的建议是简化一些关系,因为我们正在使用实体框架(一种基于模型==表模式的ORM)

我想知道他那是什么意思


感谢您迄今为止的回答,但它绝对不是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中固有的折衷方式很了解(即使他们足够聪明,不只是将所有内容都转移到循环检索记录的操作中),那么你肯定可以向他学习一些东西