0

次のような構造のテーブルがあります。

ProjectID | Field1 | Field2 | Field3 | ...
------------------------------------------
1         | aaa    | aaa    | aaa    | ...
------------------------------------------
2         | aaa    | aaa    | aaa    | ...
------------------------------------------
3         | aaa    | aaa    | aaa    | ...
------------------------------------------
1         | aaa    | aaa    | aaa    | ...
------------------------------------------
1         | aaa    | aaa    | aaa    | ...
------------------------------------------
2         | aaa    | aaa    | aaa    | ...

また、このテーブルにアクセスしてデータを読み取り、プロセスの最後に 1 つの値を書き戻す必要のある外部システムもあります。

問題は、各外部システムが自分のプロジェクト IE に関連するデータのみにアクセスする必要があることです。

  • システム 1 -> ProjectID = 2
  • システム 2 -> ProjectID = 3
  • システム 3 -> ProjectID = 1

これらのシステムはアプリケーションの外部で開発され、データのみを使用するとは想定できないため、エラーを回避するためにこのデータを分離したいと思います。

私は2つの解決策に出くわしました:

  1. 異なる DB スキーマで ProjectID ごとにテーブルを作成し、テーブルにアクセスするための資格情報のみをすべての外部システムに与えます。
  2. 特定のプロジェクトのデータのみを抽出する ProjectID ごとに更新可能なビューを作成し、ビューにアクセスするための資格情報のみをすべての外部システムに与えます。

他のアイデアはありますか?

ありがとうございました!

4

3 に答える 3

0

ほんの少しの良心の流れ...

私は同様の問題に苦しんでいます。私の現在の解決策は、1セットのテーブルがありますが、各レコードには、OrganizationIDを参照する列があります。次に、外部プログラムがSQL Select ...Where...およびUser.OrganizationID=table.OrganizationIDに追加します。

親組織の責任者である人がデータを表示するとき、SQLを追加しないので、すべての子組織にまたがるデータを表示できます。

このソリューションは、更新可能なビューと大差ありません(ただし、アプリケーションで処理する場合を除きます)。また、データの一部が相互に作用する必要のある複数の組織にまたがる可能性があるため、より良いソリューションを探しています(たとえば、Project1とProject2は相互に相互作用できますが、Project 3は分離されており、Project 4はすべてを見ることができます)

于 2013-01-18T17:15:16.230 に答える
0

データベースと対話する複数のプロジェクトがある場合は、データベースとのすべての対話を行う API を開発する必要があります。正気、睡眠スケジュール、データの整合性を保ちます。データベース層でこれを解決しないでください。

于 2012-08-30T07:37:13.950 に答える
0

したがって、API に関する私の他の回答がうまくいかない場合、これを安全に処理する適切な方法は、データを完全に分離することです。行を混在させたり、同じテーブル (またはできればデータベース) に何かを格納したりしないでください。

クライアント固有のデータベースを作成し、各外部システムにそのデータベースへのアクセスのみを許可します。

ある時点でデータを結合する必要がありますか? その場合、各データベース テーブルに (ほとんどの場合) 同じ PK があるため、キーの整合性が失われます。

データを結合する必要があり、複数列のキーを使用できない場合は、更新可能なビューが実際に唯一のオプションであるため、その整合性を維持できます。

于 2012-08-30T07:55:22.703 に答える