- ベストアンサー
リレーションシップの設定方法と共有するテーブルの管理について
- 複数のDBで共用するテーブルを別のDBに集め、リレーションシップを設定しようとしたが、同じDB内でしか設定できないかどうかについて疑問がある。
- 複数のDBで共用する場合は各DBにテーブルを用意し同期を取るべきかどうかについて疑問がある。
- 共用するマスターを一元管理する目的でテーブルを集約したが、リレーションシップを設定できなくなってしまった。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
リレーションは同じデータベース内でしか張ることはできません。 普通はそこまでDBを細分化しないものですけどね(1システム1DB)。 従来ならばサフィックスで、2005以降ならばスキーマを分けて管理するのが通常かと思います。 DBを分けてしまっている以上はリレーションをあきらめるか、各DBがマスタのコピーを持つしかないですが、 後者の場合はマスタのリアルタイム反映をあきらめることになるでしょう。 (バッチ更新かレプリケーションか。。しかしそこまで大きなシステムですか?)
その他の回答 (1)
- jamshid6
- ベストアンサー率88% (591/669)
SQL Server 2005ならば、スキーマを分ける手はありますね。 スキーマは無意識にdboを使っていると思いますが、SQL Serverのセキュリティタブの中で作れます) スキーマが別でも同じDB内ならリレーションは張れますし、スキーマ単位にアクセス権限を指定することもできます。 また、スキーマが別なら同じテーブル名でも登録可能です。 今回の例だと、請求スキーマや仕入スキーマを作って、請求.T_○○、仕入.T_○○という風になるでしょう。 dbo以外のスキーマは省略できないので、検索はSELECT * FROM 請求.T_○○という風になります。 それはそれで使いづらい点もなくはないですが、管理上はすっきりします。
お礼
ありがとうございます、スキーマを分けるのが一番良さそうですが、 名前の付け方に悩んでいます。 大元のDBを経理システムにすると営業の 顧客管理が入るとおかしいし・・・もう少し悩んでみます。 もう一つは、直すのが大変なのでDBは現状(一元管理)のままにして トリガを使ってDB間の同期が取れないかなと今日一日考えて試して いましたが、トリガがうまく作れません、もう少し頑張ってみますが また質問するかもしれませんので、宜しくお願いします。
補足
いつもありがとうございます。 > リレーションは同じデータベース内でしか張ることはできません。 リレーションシップ自体は張ってなくても問題は無いんですよね? > しかしそこまで大きなシステムですか? 単体のアクセスをアップサイジングしたので、アクセスで開発した単位毎にDBとADPができてしまいました、アクセスの時はリンクテーブルを使えば他のアクセスにテーブルの実体があろうが考えることなく使えてたのでその延長で移行してました。 要はDBは一つにして、サブシステム毎にADPを作って行けばいいんですよね? 先々を考えると置き直した方が良いような気がしますので、検討してみます。 ただ、一つのDBでテーブルやストアド等のオブジェクトが100も200もあると管理しずらいかなとも思います。 この辺は名前の付け方等で考慮するしかないのでしょうか? (T_○○ → T_請求_○○、T_仕入_○○とか)