個別のデータベースを使用してマルチテナント アプリケーションを開発しています。すべてのスキーマは、N 個の別個のデータベースに対して同じ構造を持っています。MySql と aspx を使用して Web アプリケーションを構築しています。N 個の別々のデータベースに同じユーザーがいる場合があります。ユーザーが自分のデータを持っているデータベースをリンクし、それをドロップダウンリストに表示するアプローチが必要です。ユーザーがログインするときにデータベースをリンクすると、ユーザーは自分のデータが存在するドロップダウンリストで利用可能なすべてのデータベースを表示できます。ユーザーがドロップダウンリストの値を変更すると、データベースを即座に変更し、リンクされたデータベースから自分のデータを表示できるはずです。マルチテナント アプリケーションを構築し、すべてが順調に進んでいます。問題は、特定のユーザーのマスター データベースからこれらすべてのデータベースをマップする方法です。すべてのユーザーは、個別のデータベースに個別の一意の ID を持っています。したがって、ユーザーは、データ構造以外にマルチテナント データベースに共通するものは何もありません。すべてのユーザーの一意の ID をマスター データベースに保存し、それをユーザーが存在する他の一意の ID とリンクしようとしましたが、解決策は実りのない結果をもたらしました。他の代替手段は大歓迎です。すべてのユーザーの一意の ID をマスター データベースに保存し、それをユーザーが存在する他の一意の ID とリンクしようとしましたが、解決策は実りのない結果をもたらしました。他の代替手段は大歓迎です。すべてのユーザーの一意の ID をマスター データベースに保存し、それをユーザーが存在する他の一意の ID とリンクしようとしましたが、解決策は実りのない結果をもたらしました。他の代替手段は大歓迎です。
1 に答える
0
The method I went with for multi-tenant mysql is:
- main database with all of the data all tenants, but every table has a
tenantID
column which separates out the data by tenant - create multiple databases for each tenant, but that database is filled with mysql views that reference back to the main database. For example:
.
# ie. main database has tables: users, and invoices
# if you have a new tenant 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;
In my situation, this allowed me not have to change any of my previous queries (which were built before I knew I was going to use multi-tenant). All I had to do was select the proper database, and all the data was automatically separate.
But keeping the actual data all in the same database, this simplified maintenance.
于 2014-12-06T19:25:31.657 に答える