アプリ版:「スタンプのみでお礼する」機能のリリースについて

複数のDB(請求書発行_DB、経費管理_DB、仕入管理_DB、顧客管理_DB、銀行_DB、支店_db・・・)で共用するテーブルを別のDB(マスター管理_DB)に集めました。
内容はT_部門、T_勘定科目、T_補助科目、T_取引先・・・等です。

リレーションシップを設定しようとしたのですが、リレーションシップは同じDB内でしか設定が出来ないのでしょうか?

また、複数のDBで共用する場合は各DBに必要なテーブルを用意し同期を取った方がいいのでしょうか?

共用するマスターを一元管理するのが目的です。
(当初は最初に作ったDBのテーブルを他のDBからも参照する方法でシステムを作ってきたのですが、数が増えて来るとどのマスターのメンテナンスがどのシステム(DB)でやっているのか分からなくなって来たので、一元管理をしようと集約したら、リレーションシップが張れなくなってしまいました。)

A 回答 (2件)

リレーションは同じデータベース内でしか張ることはできません。



普通はそこまでDBを細分化しないものですけどね(1システム1DB)。
従来ならばサフィックスで、2005以降ならばスキーマを分けて管理するのが通常かと思います。

DBを分けてしまっている以上はリレーションをあきらめるか、各DBがマスタのコピーを持つしかないですが、
後者の場合はマスタのリアルタイム反映をあきらめることになるでしょう。
(バッチ更新かレプリケーションか。。しかしそこまで大きなシステムですか?)

この回答への補足

いつもありがとうございます。

> リレーションは同じデータベース内でしか張ることはできません。

リレーションシップ自体は張ってなくても問題は無いんですよね?

> しかしそこまで大きなシステムですか?

単体のアクセスをアップサイジングしたので、アクセスで開発した単位毎にDBとADPができてしまいました、アクセスの時はリンクテーブルを使えば他のアクセスにテーブルの実体があろうが考えることなく使えてたのでその延長で移行してました。

要はDBは一つにして、サブシステム毎にADPを作って行けばいいんですよね? 先々を考えると置き直した方が良いような気がしますので、検討してみます。

ただ、一つのDBでテーブルやストアド等のオブジェクトが100も200もあると管理しずらいかなとも思います。 この辺は名前の付け方等で考慮するしかないのでしょうか? (T_○○ → T_請求_○○、T_仕入_○○とか)

補足日時:2009/01/09 08:54
    • good
    • 0

SQL Server 2005ならば、スキーマを分ける手はありますね。


スキーマは無意識にdboを使っていると思いますが、SQL Serverのセキュリティタブの中で作れます)

スキーマが別でも同じDB内ならリレーションは張れますし、スキーマ単位にアクセス権限を指定することもできます。
また、スキーマが別なら同じテーブル名でも登録可能です。

今回の例だと、請求スキーマや仕入スキーマを作って、請求.T_○○、仕入.T_○○という風になるでしょう。

dbo以外のスキーマは省略できないので、検索はSELECT * FROM 請求.T_○○という風になります。
それはそれで使いづらい点もなくはないですが、管理上はすっきりします。
    • good
    • 0
この回答へのお礼

ありがとうございます、スキーマを分けるのが一番良さそうですが、
名前の付け方に悩んでいます。 大元のDBを経理システムにすると営業の
顧客管理が入るとおかしいし・・・もう少し悩んでみます。

もう一つは、直すのが大変なのでDBは現状(一元管理)のままにして
トリガを使ってDB間の同期が取れないかなと今日一日考えて試して
いましたが、トリガがうまく作れません、もう少し頑張ってみますが
また質問するかもしれませんので、宜しくお願いします。

お礼日時:2009/01/10 01:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す