В моей базе данных есть таблица с именем ThingsInACircle
. Каждый раз, когда Thing
добавляется к ThingsInACircle
, он добавляется с ThingId
, который автоматически увеличивается.
Представьте, что 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 + смещение) (смещение может быть отрицательным).
Итак, возьмем для примера пример:
Вот список наших ThingIds: 1 2 3 4 5 6 7 8 9
Если мне нужны все ThingIds, где @ThingId = 2 и @offset = 3, проблем нет
SELECT ThingId FROM ThingsInACircle WHERE
ThingId BETWEEN @ThingId AND (@ThingId + @offset)
и он вернется: 2 3 4 5
Но если мне нужны все ThingIds, где @ThingId = 8 и @offset = 3, тогда возникает проблема
Функция должна вернуть: 7 8 9 1
Итак, вот моя дилемма, если мой Уровень доступа к данным содержит запрос, который использует более сложную хранимую процедуру (Выбор min, max и использование if & else для определить, были ли они превышены) , чтобы точно определить, какие записи нужно извлечь, чтобы обрабатывать записи как связанные по кругу?
Или Уровень бизнес-логики должен определить, запросил ли пользователь смещение id +, которое превышает минимальное или максимальное, и затем использует простые методы DAL для выполнения того, что ему нужно вернуться?
Это может быть просто вопросом мнения. Я только начал изучать трехуровневую структуру два дня назад, следуя учебнику microsofts , поэтому я просто хочу понять, как некоторые люди думают, что DAL и BLL должны быть сформированы: если DAL должен быть простым и BLL Я должен сделать все проверки ... Или наоборот ... Или что-то, что я пропустил все вместе.