- PR -

SQLServerのほかのユーザデータベースへの外部参照

1
投稿者投稿内容
ぎがぎが
会議室デビュー日: 2008/04/12
投稿数: 3
投稿日時: 2008-04-12 13:08
はじめまして。
SQLServerでの設計について、ご意見をお聞かせください。

[環境]SQLServer2005 Express, VB.NET 2008

小規模な業務システムなのですが、SQLServerの同一インスタンスに、業務別に
ユーザーデータベースを作成しています。
社員情報のデータベース、勤怠管理のデータベース、仕入れ業務のデータベース等、です。
まだ、全体の仕様が決まっておらず、今後随時追加していくようです。

私は、社員情報のデータベースを作成しているのですが、社員IDが勤怠管理のデータ
ベースにもあるため、別のデータベースにもリレーションシップができないかと以下を
実行しました。

コード:
USE [勤怠データベース名];
GO
ALTER TABLE [勤怠テーブル名]
ADD CONSTRAINT リレーションの名前 (社員ID)
    REFERENCES [社員情報データベース名].[スキーマ].[社員情報テーブル名] (社員ID)
GO



すると、

コード:
メッセージ 1763、レベル 16、状態 0、行 1
データベースをまたがる外部キー参照はサポートされません。外部キー '社員情報データベース名.スキーマ.社員情報テーブル名'。
メッセージ 1750、レベル 16、状態 0、行 1
制約を作成できませんでした。以前のエラーを調べてください。



と、エラーが戻りました。

やはり、ユーザーデータベースをまたがるリレーションシップはできないのでしょうか。
それとも何か方法があるのでしょうか。

あと、ひとつのインスタンスに、業務別等でユーザーデータベースを分けるというのは
一般的なのでしょうか。
構成は別の人がしたのですが、ファイルの容量や、後から別の業務のものを追加しやすいということでこうしたみたいです。Expressですし。
私としては、一つのインスタンスなので、同じユーザーデータベースにしたほうが、関連付けられるし、管理も簡単になると、最初は思ったのですが、迷っています。

ご意見お願いします。
七味唐辛子
ぬし
会議室デビュー日: 2001/12/25
投稿数: 660
投稿日時: 2008-04-12 16:50
別データベースのリレーションシップはよくわからないため
マニュアルを参考にしてください。 というかマニュアルを読んでから実行してください。


>あと、ひとつのインスタンスに、業務別等でユーザーデータベースを分けるというのは
>一般的なのでしょうか。

ケースバイケースなので回答はありません。

ぎがぎが
会議室デビュー日: 2008/04/12
投稿数: 3
投稿日時: 2008-04-12 18:03
引用:
別データベースのリレーションシップはよくわからないため
マニュアルを参考にしてください。 というかマニュアルを読んでから実行してください。


MSのBooks Onlineとか検索で思いつくキーワードで調べました。
私の調べた範囲では、Books Onlineに別データベースのリレーションシップについて、
書かれていたところがなかったので、質問したのです。
いきなりクエリを実行だけして投稿したのではありません。

初心者なので、所有権とかビューを使用するとか、リンクサーバーとか、
私が知らないことで何か実現できるのかと思い質問しました。

どなたか知っている方がいればご教授ください。


七味唐辛子
ぬし
会議室デビュー日: 2001/12/25
投稿数: 660
投稿日時: 2008-04-13 00:40
SQlSERVERは使ったことがないため一般論で回答します
リレーションシップを定義するSQlで別のデータベースを指す
識別子を設定する項目がなければお望みのことはできません。

ひととおり調べて無かったとのことでしたので「できない」と考えるのが妥当です。

ただ他のデータベースのテーブルにリンクを張った上で、そのテーブルを自分の物のように扱えるように
できるのであれば、設定できるかもしれません。

ただこれが正解かどうかはわかりません あしからず

99ri
大ベテラン
会議室デビュー日: 2006/09/09
投稿数: 129
投稿日時: 2008-04-13 00:43
Books onlineより
CREATE TABLE (Transact-SQL)
解説
FOREIGN KEY 制約
FOREIGN KEY 制約は、同じサーバー上の同じデータベース内のテーブルのみを参照できます
複数のデータベースにまたがる参照整合性は、トリガを使って実装する必要があります。
詳細については、「CREATE TRIGGER (Transact-SQL)」を参照してください。
ぎがぎが
会議室デビュー日: 2008/04/12
投稿数: 3
投稿日時: 2008-04-14 21:04
七味唐辛子さん、99riさん、ご返信ありがとうございます。
引用:
Books onlineより
CREATE TABLE (Transact-SQL)
解説
FOREIGN KEY 制約
FOREIGN KEY 制約は、同じサーバー上の同じデータベース内のテーブルのみを参照できます
複数のデータベースにまたがる参照整合性は、トリガを使って実装する必要があります。
詳細については、「CREATE TRIGGER (Transact-SQL)」を参照してください。


自分では調べたつもりでしたが、見落としていました。
トリガについても、何かイベントがあると実行されるものというくらいしか知りません
でしたので勉強になりました。

今回の案件は、別データベースにまたがるものは、トリガで参照整合性を保つということで
解決しそうです。
もう少し勉強してから実装します。助かりました、ありがとうございます。
1

スキルアップ/キャリアアップ(JOB@IT)