Прекрасно, когда все ваши приложения используют одну и ту же базу данных.
Однако вы рискуете, что разные приложения используют базу данных по-разному.
По этой причине я бы рекомендовал вам использовать как можно больше логики в MySQL.
Я не могу сказать вам, как это сделать, потому что я не знаю, что ваши приложения делают или нуждаются, но я могу дать вам некоторые общие идеи и указания.
Общие идеи и указатели
Вы можете использовать хранимые процедуры / функции, чтобы делать вещи
Если ваши приложения используют хранимую процедуру, чтобы все происходило в одной базе данных, все приложения будут работать одинаково.
Использовать сохраненные функции для выполнения расчетов на полях. (например, использовать хранимую процедуру для резервирования транзакции)
Price_per_sales_line = price * quantity * 1+tax% * 1-discount%
Если вы поместите эту логику в функцию MySQL, вам не нужно беспокоиться об отладке этого в приложении A или B, потому что все приложения будут работать одинаково.
И мой личный фаворит
Используйте триггеры, чтобы убедиться, что все происходит правильно.
например. если у вас есть транзакция, в которой вам нужно добавить новый предмет для продажи, вы можете поместить это в сохраненный процесс, но вы также можете сделать что-то вроде:
Псевдокод
CREATE table blackhole_new_sales_item (
name varchar(45) not null
price decimal(10,2) not null
category_id integer not null )
ENGINE = Blackhole;
DELIMITER $$
CREATE TRIGGER ai_bh_new_sales_item_each FOR EACH ROW
BEGIN
/*all stuff inside a trigger happens in a single transaction*/
DECLARE new_item_id INTEGER;
INSERT IGNORE INTO items (name) VALUES (NEW.name);
SELECT id INTO new_item_id FROM items WHERE name = NEW.name;
INSERT IGNORE INTO item_categories (item_id, cat_id) VALUES (new_item_id, NEW.category_id)
INSERT INTO price (item_id, price, valid_from, valid_until) VALUES
(new_item_id, NEW.price, NOW(), '2038-12-31');
END $$
DELIMITER ;
В своих приложениях вы можете просто сделать один:
INSERT INTO blackhole_new_sales_item VALUES ('test','0.99',2)
И триггер позаботится обо всем, и если вы измените структуру своей базы данных, вам нужно только изменить внутреннюю часть триггера, и все ваши приложения будут работать без изменений.
Если вы добавите дополнительные поля в таблицу blackhole, вам нужно будет изменить только один вызов в каждом приложении.
Вы даже можете создать дополнительную таблицу «черных дыр» и создать для этого отдельный триггер, а также заполнить свой старый триггер таблицы «черных дыр» резервным кодом для поддержки старых приложений.
Таким образом, этот подход дает вам единую точку для размещения всей логики вашей БД, чтобы все приложения работали одинаково, при этом оставаясь достаточно гибкими для поддержки обновлений.
Надеюсь, это поможет.