这是完全正常的有所有应用程序使用同一个数据库。
但是,您在运行不同的应用程序以不同的方式使用该数据库的风险。
为此,我建议你把尽可能多的逻辑尽可能在MySQL。
我不能告诉你如何做到这一点,因为我不知道你的应用程序做什么或需要,但我可以给你一些总体思路和指针。
总体思路和指针
您可以使用存储过程/函数做的东西
如果您的应用使用存储过程,以使单个数据库的东西发生,所有的应用程序将在工作同样的方式。
使用存储函数对字段进行计算。 (例如,如使用存储过程预订交易)
Price_per_sales_line = price * quantity * 1+tax% * 1-discount%
如果你把这个逻辑在MySQL的功能,比你不必担心应用程序A或B调试这一点,因为所有的应用程序将以相同的方式工作。
而我个人最喜欢的
使用触发器来确保正常发生。
E.g.如果你有,你需要在一个存储过程中添加新的项目出售,你的把这个交易,但你也可以这样做:
伪代码
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)
如果你改变你的数据库的结构的触发将采取一切照顾,你只需要改变触发的内部,所有的应用程序将在不改变工作。
如果向黑洞表中添加额外字段,则只需在每个应用程序中更改单个调用。
您甚至可以创建一个额外的黑洞表并为此创建一个单独的触发器,并使用回退代码填充旧黑洞表触发器以支持较旧的应用程序。
因此,这种方法为您提供了一个指向所有数据库逻辑的单一点,因此所有应用程序都将以相同的方式运行,同时仍然足够灵活以支持升级。
希望这会有所帮助。
感谢您的回复。我想我真的很困惑,现在当我坐下来思考时,我想我对自己需要发生的事情有了更清晰的认识。我们从设备收集数据并生成不同的报告,其中大多数这些提要非常适合作为单独的应用程序。诸如仪表板之类的一些报告需要来自差异Feed的数据。当你创建这样一个应用程序,以便重用DTO或BL或DAO时,我们会在仪表板应用程序的WAR中将它们用作依赖的jar。因此,如果我宁愿在数据库中创建一个视图,以执行所有JOIN(如果需要的话),以消除应用程序中的任何依赖性问题。你怎么看?! – opensourcegeek 2011-06-11 19:38:31
创建视图是一种选择。但这听起来像你也可能正朝着想要一个单独的数据仓库的方向发展。 – 2011-06-13 15:45:53
Stevi你让我好奇,能否请你再解释一下?我之前没有使用过任何数据仓库套件,所以任何方向都非常方便!再次感谢。 – opensourcegeek 2011-06-14 13:16:38