Я создал рабочее веб-приложение, использующее AngularJS поверх API отдыха (Slim / PHP / MySQL) для своей собственной компании. Теперь у меня есть куча запросов, чтобы пометить его для других компаний, таких как моя.
Мой бэкэнд, вероятно, имеет около сотни конечных точек API Rest, встроенных в PHP, которые извлекаются из 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;
Можете ли вы придумать другой способ, или помочь мне реализовать эту переменную в виде, или указать мне правильное направление?
Это метод, с которым я пошел:
entityID
колонка..
# 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;
В моей ситуации это позволило мне не менять ни один из моих предыдущих запросов в моем коде. Все, что мне нужно было сделать, это выбрать правильную базу данных, и все данные были автоматически разделены.
Но хранение фактических данных в одной базе данных упрощает обслуживание.
Других решений пока нет …