2009-08-26 12 views
2

私が取り組んでいるC#プログラムは、1つ以上のデータテーブルにデータをエクスポートする必要があります。これらのテーブルのいくつかの列は互いに関連しているので、あるテーブルのID列は別のテーブルのセルによって参照されることがあります。これは、DataRelationを設定する一般的なケースのようです。しかし、私はこれらの関係が実際にどのように後で実際に使用できるかを理解しようとしています。DataSet内のDataRelationの目的は何ですか?

私はリレーショナルデータベースではあまり経験はありませんが、それほど多くはありません。私は、SQLのクエリやLEFT join、right joinなどのことを理解しています。そして、私はGUIと手作業の両方でクエリを作成するAccessでいくつかの作業をしました。しかし、私は決してデータベースそのものに関係を作りませんでした。私は1分前に​​Accessでこれを試しました。関係を作成した後、2つのテストテーブルをクエリに追加しようとしましたが、自動的に結合が作成されました。

実際に実際のSQLを見たときに、関係から派生したJOINコマンドが実際に含まれていました。しかし、これは、クエリが全く関係に依存していないことを意味します。 Accessのようなドラッグ&ドロップタイプのクエリエディタを持たないデータベースでは、どのようにリレーションシップを使用しますか?

データベースまたはデータセット内のリレーションシップを作成する唯一の理由は、関係が存在する必要がありますが、必ずしもそれらを強制する必要はありません。

答えて

1

DataRelationsは次の目的で使用されています:

  • インスタンスの関係の子行または親行を取得し、関係を通じて
  • 移動(あなたが親テーブルに存在しない行を参照することはできません)参照整合性を強制する:

    DataRow[] orderRows = customerRow.GetChildRows("Customers_Orders");

  • 親または子の行を参照する式を計算列を作成します

    OrderTotalColumn.Expression = "Sum(Child(Orders_OrderDetails).Quantity * Child(Orders_OrderDetails).UnitPrice)";

DataRelationsもWindowsフォーム結合システムでも

0

実際には反対です。テーブル間のリレーションシップを設定すると、それらを実行するのに役立ちます。外部キーの関係を設定し、テーブルにデータを挿入しようとすると、外部キーを含めないと、データベースによって停止されます。

リレーションシップを設定しても、多くのDBにカスケード更新と削除があります。親を更新/削除するときに、子関係を自動的に更新および/または削除します。 http://www.sqlteam.com/article/database-design-and-modeling-fundamentals:のDataRelationは、それがコード・レベルでの関係を強化に役立つことで同様に動作

....

は、ここでデータベース設計の基礎の一部へのリンクです。 #4、5、6、7は関係について話します。ここ

とは、詳細は別です: http://www.deeptraining.com/litwin/dbdesign/FundamentalsOfRelationalDatabaseDesign.aspx

ここでDataSetを使用するときに、コード内の親/子関係を支援したDataRelationを使用してのチュートリアルです:

http://www.dotnetjohn.com/articles.aspx?articleid=63

そして、ここには、DataRelationのMSDNがあります。 http://msdn.microsoft.com/en-us/library/system.data.datarelation(VS.80).aspx

0

を使用している、彼らはあなたが持っている場合でも、同じ名前(ID)であれば時々、クエリデザイナでのアクセスは自動的に2つのテーブルのフィールドに参加します関係を作成していない。

0

データベースエンジンレベルの参照整合性とAccess UIの優れた機能が混乱しているようです。

他の人が説明したように、関係はデータに関するものであり、リレーションシップデザイナで得られるかなりのエンティティリレーションシップダイアグラムや、Accessクエリグリッドでの使いやすさに関するものではありません。リレーションシップは、あるテーブルのフィールドの値を、別のテーブルのカラムから引き出された値に制限します。

2つのテーブルの間にRIを定義して追加すると、クエリグリッドに表示される行は、既定の関係を描画するのに十分なAccessの結果です。

アクセスは、デフォルトでは、「AutoJoin」を使用して関係について推測します。これは、TOOLS |オプション|テーブル/クエリー。

を選択し、自動的に内部は、あなたがデザイングリッドに を追加する2つのテーブル間の結合を を作成するには:ここでは、この説明は何です。 で テーブル間の関係を自分で定義する場合は、クリアしてください。 AutoJoinを にするには、テーブルの名前とデータ型が同じ の フィールドをそれぞれ持っていて、結合フィールドの1つが プライマリキーである必要があります。

この場合、リレーションシップが定義されていない場合でも自動結合行が得られます。

また、保存されたQueryDefにフィールドのエイリアスを設定すると、両方の種類の自動結合が失われる可能性があります。これは最近のバージョンのAccessで変更されたものだと私は思っていますが、実際に確認する時間はありません。

関連する問題