-3

我为我自己的公司创建了一个使用 AngularJS 而不是 rest API (Slim/PHP/MySQL) 的工作网络应用程序。现在我有一堆要求为像我这样的其他公司贴上白标签。

我的后端可能有一百个左右用 PHP 构建的 Rest API 端点,这些端点来自 MySQL。

对我来说,分离所有数据的最简单/最好的方法是什么?

我倾向于的设计是将所有这些托管在同一个数据库中,并entityID为每个表添加一列,并为我的每个白标公司分配一个 entityID。

然后将其添加到每个 SQL 命令中:

...AND entityID=X
ie.
SELECT * FROM invoices WHERE status='paid' AND entityID=1;

这似乎是一种非常“蛮力”的方法,因为我必须编辑 100 多个 SQL 命令,其中一些是复杂的连接。你能想出更好的方法吗?我想知道是否有某种方法可以使用“MySQL 视图”。我已经在使用 Views 来隐藏“已删除的行”:

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;  

你能想出另一种方式,或者帮助我在视图中实现那个变量,或者指出我正确的方向吗?

4

1 回答 1

1

这是我采用的方法:

  • 我在主数据库中保存了所有实体/公司的所有数据,并有一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;

在我的情况下,这使我不必更改我以前在代码中的任何查询。我所要做的就是选择合适的数据库,所有数据都会自动分离。

但是将实际数据全部保存在同一个数据库中,这简化了维护。

于 2014-12-06T19:29:39.030 回答