在我的数据库中,我有一个名为ThingsInACircle
. 每次将 aThing
添加到 时ThingsInACircle
,都会添加一个ThingId
自动递增的 a。
把这张表中的 想象Things
成一个圆圈。
SELECT Thing FROM ThingsInACircle WHERE ThingId = 10
旁边是
SELECT Thing FROM ThingsInACircle WHERE ThingId = 11
。
还有……
SELECT Thing FROM ThingsInACircle WHERE ThingId = min(ThingId)
旁边
SELECT Thing FROM ThingsInACircle WHERE ThingId = max(ThingId)
我想说:对于给定的 ThingId 和偏移量,返回 ThingsInACircle 中从 ThingId 到 (ThingId + offset) 的所有记录(偏移量可能为负数)。
因此,以此为例进行设置:
以下是我们的 ThingId 列表:1 2 3 4 5 6 7 8 9
如果我想要 @ThingId = 2 和 @offset = 3 的所有 ThingId,则没有问题
SELECT ThingId FROM ThingsInACircle WHERE
ThingId BETWEEN @ThingId AND (@ThingId + @offset)
它会返回:2 3 4 5
但是,如果我想要 @ThingId = 8 和 @offset = 3 的所有 ThingId,那么就有问题了
该函数应返回:7 8 9 1
所以这是我的困境,我的数据访问层是否应该包含一个使用更复杂的存储过程的查询 (选择最小值、最大值并使用 if & else 来确定它们是否已被超过)来确定要检索哪些记录以进行处理记录被链接成一个圆圈?
或者业务逻辑层是否应该确定用户是否请求了超过 min 或 max 的 id + 偏移量,然后使用简单的 DAL 方法来完成它需要返回的内容?
这可能只是一个见仁见智的问题。前两天刚开始学习三层结构,是跟着微软教程学的,所以我想了解一下有些人认为DAL和BLL应该如何形成:如果DAL应该简单,BLL应该做所有的验证......或者反过来......或者我一起错过的东西。