Сделать определение таблицы service_pay так:
create table service_pay
(
service_id ...,
transaction_id ... CHECK (transaction_id in (select id from transaction_table where type = ...)) #тип расходной транзакции
foreign key (transaction_id) references transaction(id)
);
Или можно создать триггер на таблицу service_pay:
DELIMITER //
CREATE TRIGGER service_pay_bi
BEFORE INSERT ON service_pay
FOR EACH ROW
BEGIN
IF NEW.transaction_id IN (SELECT id FROM transaction_table WHERE type = ...) THEN #указать значение события дохода
@last_error = "service_pay table can hold only the payment transactions";
CALL non_existent(); #единственный способ прервать операцию
END IF;
END//
А можно транзакции дохода и расхода хранить в разных таблицах, но в расходных добавить столбец service_id, тогда таблица service_pay не нужна. Если нужна выборка из всех транзакций - пользоваться UNION.
SELECT ...
FROM tbl_1
UNION
SELECT ...
FROM tbl_2;