5

これが他の場所で尋ねられた場合は申し訳ありませんが、明確な答えがどこにも見つかりませんでした。

リレーショナル データベース、つまり SQL の使い方をもう少し学び始めることにしました。これは主要な初心者の質問ですが、始めるにはおそらく不可欠です。

私は基本的に、SQL(またはその他)の使用方法に関するベストプラクティスを少し混乱させています。大学では、モバイル アプリなどのデータベースに (JSON 文字列を使用して) アクセスしたことがありますが、実際に自分でデータベースを設計して構築したことはありません。

系図情報 (つまり、家族とそのメンバー) を保持する C# アプリケーションがあり、各個人をデータベースに保存したいとします。既存の構造を使用して、xml やテキスト ドキュメントではなくデータベースのフィールドに保存しますか? それとも別の方法で動作しますか?つまり、必要なフィールドを含むデータベースを作成し、ac# アプリケーションでデータベースからこれを取得し、必要に応じてデータを操作するので、アプリケーションは完全に異なります (つまり、c# アプリケーションは基本的に実際にはデータを保持/保存せず、データベースから供給されたものでのみ機能します)?

私を悩ませているのは、通常、c# オブジェクトをたとえば辞書やリストに格納する場所ですが、代わりにデータベースから直接取得するのでしょうか? またはからデータを取得して通常の構造に保存し、そこから作業します(これはデータベースからの高速検索のポイントを確実に無効にします)?

少し考え過ぎかもしれません。それが理にかなっていることを願っています。前もって感謝します

4

5 に答える 5

7

私は、単に私がすでに持っている構造を使用しますか...

また

必須フィールドを含むデータベースを作成しますか...

それがあなたの質問の核心だと思います。

データベースから開始

私にとって、バックエンドデータベースを使用するアプリケーションを構築する場合、実体関連図は非常に重要です。http://www.sum-it.nl/cursus/dbdesign/english/index.php3で、あなたにぴったりの小さなチュートリアルを見つけましたが、学習スタイルに合ったチュートリアルを簡単に見つけることができます。重要な点は、アプリケーションが何らかの形でキャプチャできる方法で、問題のあるドメイン(アプリケーションを必要とする現実の世界)をモデル化しようとしているということです。関連するテーブルのERダイアグラムができたら、詳細を理解するのが簡単になります。SQL Server 2008(Expressエディション)用のSQL Management Studioを使用すると、いくつかの基本的なテーブルを作成し、そこにERダイアグラムを作成して、関係を生成させることができます。その後、自由に、それを達成するために使用されるSQLを調べ、それに応じて改良することができます。

個人的には、常に問題のあるドメインを調べることから始め、次にERダイアグラムを作成し、次にデータベースを作成します。データベースが問題のドメインを反映していると合理的に確信できるときに、C#アプリケーションの構築を開始します。

C#アプリケーションから開始

ただし、本当に重要なのは、意味のある効果的な方法で現実の世界をモデル化することです。あなたの場合、C#で作成した構造の開始点がすでにあり、それらを使用してER図を作成するための開始点を提供できます。C#アプリケーションを実行し、それを反映するデータベースを構築する方が簡単な場合は、それで問題ありません。おそらく、問題のドメインを効果的にキャプチャするのに役立つアプローチがすでにあるでしょう。これは、何をするにしても反復的なプロセスです。C#コードを作成すると、基盤となるデータベース設計の問題が明らかになる可能性があり、その逆も同様です。

ダイアグラム作成-ERまたはUML?

私は、このビジネス全体が非常に複雑であるため、実際にいくつかの図が必要であると個人的に確信しています。

  • データベースを視覚化するには、ER図を使用します
  • C#アプリケーションを視覚化するには、UMLクラス図を使用します

動作するアプリケーションに向かうと、これら2つの図がどのように一致し始めるか、または少なくとも他の図がかなり密接に反映されているかがわかります。どちらの場合も、(エンティティまたはクラス)オブジェクト間の関係を理解することは、データベースをクエリするときに非常に重要です。これは、テーブル間の関係を理解することが重要であるためです(特に、複雑な多対多を解決するために1対多の関係を使用する)。関係)およびクエリでテーブルを結合するためのさまざまな手法(INNERまたはOUTER結合など)C#アプリケーションがどれほど巧妙であっても、ある時点でSQL言語の複雑さの少なくとも一部を理解する必要があります。 ER図を参照できます。

どこに保管しますか?

私が困っているのは、通常、c#オブジェクトを辞書やリストに保存する場合、代わりにデータベースから直接取得するのでしょうか。

データベースでは、間違いなく。FamilyというAC#クラスには、たとえば、setterメソッドが組み込まれたFamilyNameプロパティがあります。スペルミスを発見して名前を変更したい場合、setterメソッドはデータベースへの接続を開き、パラメータとして指定されたファミリ名(およびおそらくファミリID)を指定し、それに応じて基になるフィールドを更新します。データを取得するには、SELECTクエリなどを実行する必要があります。

結論

問題のあるドメインを調べ、実体関連図を作成し、その図に基づいて一連の関連テーブルを作成する方法について、いくつかのチュートリアルを実行します。そうすれば、バックエンドデータベースと通信するために構築したC#クラスを追跡するのがはるかに簡単になると確信しています。

家族とそのメンバーの簡単なER図の例を次に示します。

単純な図

まず、メンバーと家族が1つのテーブルに含まれていると思うかもしれませんが、それによって多くの重複が生じることがわかったので、それを1対多の関係で家族とメンバーのテーブルに分けます。たとえば結婚を通じて、人々は複数の家族に属することができ、多対多の関係を築く必要があります。ERダイアグラムは、そのような複雑さを解決するのに最適な場所だと思います。

于 2012-07-21T04:47:56.683 に答える
0

Take a look at entity frameworks code first. If your data structures are classes in your application there are techniques to use that to create your database schema from that. As far as the data. Store it in your database and populate your lists and dictionaries with it. Or populate list of class genealogy individual with it.

于 2012-07-20T23:46:30.660 に答える
0

私が正しければ、データベースからすべてのレコードを取得してオブジェクトとしてコレクションに保存するか、データベースから選択したレコードを取得して、目的が定義された構造に配置せずにデータセットの結果を使用する必要があるかどうかも尋ねています。

データベースから必要なレコードを選択し、その結果を目的に定義されたクラス/構造にロードする傾向があります。これにより、各メソッドにデータセットの結果を取り込む必要なく、レコードの結果などを保持するクラスに操作メソッドを追加できます。ただし、バッチ更新がより効率的である可能性がある場合は、常に単一の更新を行っていることに気付くでしょう...それが理にかなっている場合。

于 2012-07-20T23:37:48.243 に答える
0

構造がどのように見えるか、または DB がどのように設計されるかがわからないため、これに答えるのは困難です。ただし、既存のデータ構造を使用して、XML ファイルの代わりにデータベースからデータをパイプするだけでよいはずです。

Linq-to-XMLを調べると、C# には SQL とやり取りするための強力なライブラリがあります。最初は少し戸惑うかもしれませんが、習得すると非常に強力です。

于 2012-07-20T23:31:20.227 に答える
0

独自のデータ クラスを作成する場合は、私が作成した無料のチュートリアルがここにあります。これらのウィザードは ASP.NET の世界の Barty Crouches であるため、ASP.NET でデータ ソースを使用することは絶対に避けたいと思います。それらを微調整すると、これを行う方法がわかりません。

于 2012-10-18T07:27:41.810 に答える