0

個別のデータベースを使用してマルチテナント アプリケーションを開発しています。すべてのスキーマは、N 個の別個のデータベースに対して同じ構造を持っています。MySql と aspx を使用して Web アプリケーションを構築しています。N 個の別々のデータベースに同じユーザーがいる場合があります。ユーザーが自分のデータを持っているデータベースをリンクし、それをドロップダウンリストに表示するアプローチが必要です。ユーザーがログインするときにデータベースをリンクすると、ユーザーは自分のデータが存在するドロップダウンリストで利用可能なすべてのデータベースを表示できます。ユーザーがドロップダウンリストの値を変更すると、データベースを即座に変更し、リンクされたデータベースから自分のデータを表示できるはずです。マルチテナント アプリケーションを構築し、すべてが順調に進んでいます。問題は、特定のユーザーのマスター データベースからこれらすべてのデータベースをマップする方法です。すべてのユーザーは、個別のデータベースに個別の一意の ID を持っています。したがって、ユーザーは、データ構造以外にマルチテナント データベースに共通するものは何もありません。すべてのユーザーの一意の ID をマスター データベースに保存し、それをユーザーが存在する他の一意の ID とリンクしようとしましたが、解決策は実りのない結果をもたらしました。他の代替手段は大歓迎です。すべてのユーザーの一意の ID をマスター データベースに保存し、それをユーザーが存在する他の一意の ID とリンクしようとしましたが、解決策は実りのない結果をもたらしました。他の代替手段は大歓迎です。すべてのユーザーの一意の ID をマスター データベースに保存し、それをユーザーが存在する他の一意の ID とリンクしようとしましたが、解決策は実りのない結果をもたらしました。他の代替手段は大歓迎です。

4

1 に答える 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 に答える