質問

silverlightを使用して、アプリケーションが表示するすべてのデータのバックエンドでSQL Server DBを使用するWebベースのアプリケーションを実装しています。アプリケーションを簡単にスケーラブルにすることができるようにしたいので、これに取り組む方向は、データベースを疎結合にし、すべてを外部キーに結び付けないことです。いくつかの例を検索しようとしましたが、役に立ちませんでした。

これを始めるために役立つ情報や良い出発点/サンプル/例はありますか?

ヘルプに感謝します。

よろしく、

役に立ちましたか?

解決

データウェアハウスのように、一度に大量の挿入を行う場合を除き、外部キーを使用します。 正規化は狂ったようにスケールするので、それを利用する必要があります。外部キーは高速で、一度に何百万ものレコードに何百万ものレコードを挿入する場合にのみ、制約は本当にあなたを妨げます。

クラスター化インデックスが設定された整数キーを使用していることを確認してください。これにより、テーブルの結合が非常に高速になります。外部キーなしで自分を包み込むことができる問題は多く、イライラさせられます。週末ずっとそうしていたので、外部キーを持たないように意識的に選択しました(ただし、テラバイトのデータがあります)。

他のヒント

用語を少し混同していると思います。 「疎結合」互いに依存しすぎて、同じプログラムに一緒にいないと機能したり、コンパイルすることさえできないソフトウェアコンポーネントを持つことが望ましいことを指します。同じデータベース内のテーブル間の関係を表すのに使用される用語を見たことがありません。

「正規化」という用語で検索すると思います。および「非正規化」より良い結果が得られます。

そのようなことを考える前に、データの整合性について考える必要があります。外部キーが存在するため、ベースとなるプライマリデータが存在しない場合、レコードをテーブルに配置できません。外部キーを使用しない場合は、遅かれ早かれ(おそらく早く)価値のないデータになります。たとえば、顧客が注文の添付先を本当に知らないためです。外部キーはデータを保護するため、使用しないことを検討しないでください。

そして、あなたはすべてのデータがアプリケーションから来ると思っていても、実際には、これは単に真実ではありません。データは、複数のアプリケーション、大量のデータのインポート、クエリウィンドウから取得します(誰かがユーザーインターフェイスから一度に1つの価格を更新する予定がないすべての価格を更新することを決定した場合を考えます)。データは多くのソースからデータベースにアクセスできるため、データベースレベルで保護する必要があります。より少ないことは、アプリケーションとデータ全体を危険にさらすことです。

データベーススクリプトなどの外部ソースを介してデータが入力される場合のデータベースセキュリティに関する興味深いコメント。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top