Практически невозможно сделать это правильно в коде, который находится за пределами базы данных. Любой код, который проверяет, существуют ли 2 записи и если нет, то позволяет добавить новую запись, может быть одурачен 2 потоками, работающими одновременно на одном и том же родительском объекте. Если вы на самом деле не заблокируете таблицу базы данных или не сериализуете дочерний процесс сложения, любой из которых создает реальную нехватку масштабируемости.
Вы не упоминаете СУБД, поэтому вам сложно найти решение.
РЕДАКТИРОВАТЬ:
Я согласен с теми, кто говорит, что триггеры далеко не чисты. Но они не единственный способ обеспечить соблюдение правил в базе данных. Вот почему я сказал, не зная вашей СУБД, было бы невозможно предложить какое-либо решение для базы данных или даже решение, которое не требует триггера.
Кроме того, вам не нужен триггер, потому что ваш средний уровень никогда не использует DML, он просто вызывает процедуры базы данных или пакеты, которые инкапсулируют ваш CRUD. Не так ли?!