1

次のような2つのテーブルAとを考えてみましょう(醜いASCIIテーブルについてお詫びします)。B

----------------------------------     ------------------------
|  SNID  |  PNID  | SerialNumber |     |  PNID  |  PartNumber |
|--------|--------|--------------|     |--------|-------------|
|   0    |   0    |   17823      |     |   0    |  9874-4362  |
|--------|--------|--------------|     |--------|-------------|
|   1    |   0    |   17824      |     |   1    |  1053-1409  |
|--------|--------|--------------|     ------------------------
|   2    |   1    |   97245      |
----------------------------------

PNID 0場所αのサーバーがに特定の権限を持ち、場所βのサーバーがに特定のアクセス権を持つことができるようにしたいPNID 1のですが、同じタイプのデータ(所有者が異なるだけ)なので、私はしませんデータ自体を分離する必要があると考えてください。

いずれにせよ、βがにアクセスしたい場合は、のシリアル番号を割り当てて、PNID 0許可される前にまずαと通信する必要があることを確認したいと思います。これは、それらの間のネットワークがダウンした場合、αは生成できるが生成できPNID 0PNID 1、βは生成できるが生成できPNID 1ないことを意味しPNID 0ます。ただし、2つのエンティティが相互に通信を再開すると、αが作成したシリアル番号はすべてPNID 0βに複製され、βからのシリアル番号はPNID 1αのデータベースにマージされます。

より一般的には、αがβの許可なしに新しいシリアル番号を追加できるかどうかに関するすべての決定を行う「仲介者」の場所Ωでこれを設定することを本当に望んでいます。

現在、SQL Server Express(2008 r2)とVisual Basic .NET Express(2010)を使用してサーバーを実装していますが、現在発生している問題を解決できる可能性のある他のオプションを利用できます。正直なところ、私が求めていることがもっともらしいとは言えませんが、もしそうなら、それは私が本当に実装することに非常に興味があることです。

ほとんどすぐに、私が最初に考えることができるのは、場所を表す別の列をテーブルに追加することですBが、これを行うための「正しい」方法ではないと思います。特に他のサーバーとの通信に関する部分(そして正直なところ、データベースでそれができるかどうかさえわかりません。そのため、おそらく.NETで行う必要があると思います。

4

1 に答える 1

2

αのようなビューを作成することを検討しましたか

select * from A where PNID0=0
select * from B where PNID0=0

βのビューを作成します

select * from A where PNID0=1
select * from B where PNID0=1

次に、別の Ω の場所を作成する代わりに、さまざまな場所のこれらのビューにアクセス許可を付与できます。

于 2011-02-28T13:38:19.157 に答える