我已经为我自己的公司创建了一个使用AngularJS而不是rest API(Slim/PHP/MySQL)的工作Web应用程序。现在我有很多要求为像我这样的其他公司贴上白标。
我的后端可能有一百个左右的 Rest API 端点内置在 PHP 中,这些端点来自 MySQL。
对我来说,分离出所有这些数据的最简单/最佳方法是什么?
我倾向于的设计是将所有这些托管在同一个数据库中,并为每个表添加一个entityID
列,并为我的每个白标公司分配一个实体 ID。
然后将此添加到每个 SQL 命令中:
...AND entityID=X
ie.
SELECT * FROM invoices WHERE status='paid' AND entityID=1;
这似乎是一种非常"蛮力"的方法,因为我必须编辑 100+ SQL 命令,其中一些是复杂的连接。 你能想到更好的方法吗?我想知道是否有某种方法可以使用"MySQL 视图"。我已经在使用视图来隐藏"已删除的行":
CREATE VIEW invoices AS
SELECT * FROM _invoices where deleted is null;
所以从理论上讲,我应该能够编辑我的所有视图......右?
CREATE VIEW invoices AS
SELECT * FROM _invoices where deleted is null
AND entityID=@entityID;
// BUT HOW would i set that entityID as a sql Variable from each PHP call?...
// I suppose I would have to add this before each call?
SET @entity=X;
你能想到另一种方法,或者帮助我在视图中实现该变量,或者为我指出正确的方向吗?
这是我使用的方法:
- 我保留了包含所有实体/公司的所有数据的主数据库,并有一个
entityID
列。 - 我为每个实体创建了一个新数据库,但该数据库充满了引用主数据库的 mysql 视图。例如:
.
# ie. main database has tables: users, and invoices tables
# if you i have a new company named "acme", then:
create database acme;
create view acme.users as select * from maindb.users where entityID=2;
create view acme.invoices as select * from maindb.invoices where entityID=2;
在我的情况下,这使我不必更改代码中的任何先前查询。我所要做的就是选择合适的数据库,所有数据都会自动分离。
但是将实际数据全部保存在同一个数据库中,这简化了维护。