2

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

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

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

データベースにリレーションシップを作成したい、またはDataSetにDataRelationを作成したい唯一の理由は、どのようなリレーションシップが存在する必要があるかを暗示できるようにするためですが、必ずしもそれらを強制する必要はありませんか?

4

4 に答える 4

1

DataRelationsは次の目的で使用されます。

  • 参照整合性を適用します(親テーブルに存在しない行を参照することはできません)
  • リレーションをナビゲートします。たとえば、リレーションの子行または親行を取得します。

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

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

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

DataRelationsは、Windowsフォームバインディングシステムでも使用されます

于 2009-08-26T01:04:43.233 に答える
0

実際には反対です。テーブル間に関係を設定すると、テーブルを強制するのに役立ちます。外部キー関係を設定し、データをテーブルに挿入しようとし、外部キーを含めない場合、データベースは停止します。

多くのDBには、リレーションを設定するときにもカスケード更新と削除があります。親を更新/削除するときに、子リレーションを自動的に更新および/または削除します。

DataRelationは、コードレベルで関係を強制するのに役立つという点で同様に機能します。

データベース設計の基本のいくつかへのリンクは次のとおりです: http ://www.sqlteam.com/article/database-design-and-modeling-fundamentals 。#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

于 2009-08-26T00:54:40.433 に答える
0

クエリデザイナのAccessは、リレーションシップを作成していなくても、2つのテーブルのフィールドが同じ名前(ID)である場合、それらのフィールドを自動的に結合することがあります。

于 2009-08-26T19:56:12.467 に答える
0

データベースエンジンレベルでの参照整合性とAccessUIの優れた機能を混同しているように思われます。

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

RIが定義された2つのテーブルを追加したときにクエリグリッドに表示される行は、Accessがデフォルトの関係を描画するのに十分優れている結果です。

デフォルトのAccessは、TOOLS|で制御できる設定である「AutoJoin」を使用して関係についても推測します。オプション| テーブル/クエリ。この説明は次のとおりです。

デザイングリッドに追加する2つのテーブル間に内部結合を自動的に作成する場合に選択します。テーブル間の関係を自分で定義する場合はクリアします。AutoJoinを実行するには、各テーブルに同じ名前とデータ型のフィールドが必要であり、結合フィールドの1つが主キーである必要があります。

その場合、関係が定義されていない場合でも、自動結合線を取得できます。

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

于 2009-08-28T02:08:46.957 に答える