web-dev-qa-db-ja.com

SQL Server内のNoSQL

この質問は、SQLとNoSQLの違いについてではありません。現時点では本当に意味をなさないような理由の根拠を探しています(多分、理解や評価が不足しているためです)。

MVC5、エンティティフレームワーク6のコードを最初に使用し、SQL Server 2008を使用して、新しいプロジェクトをゼロから開始しました。アーキテクトがデータベーススキーマを確認したとき、これは「ビジネスロジック」であり、すべての外部キーおよびその他の制約を削除する必要があると述べられました。アプリケーションコードのビジネスレイヤー内で適用する必要があります。

私の意見では、外部キーはデータ/参照整合性の一部を形成し、ビジネスロジックを実際には模倣しないということです。私は、ビジネスロジックを、参照が適用される内容/タイミング/方法/理由を制御するプロセスと検証であると考えています。一意の制約は間違いなくビジネスプロセスであることはある程度理解できますが、これは論理を補完し、整合性の一部を形成するだけです。

2番目の引数は、データにNoSQLアプローチを採用することです。 SQL-Server 2008の使用、レポートの必要性、テラバイトにスケーリングしないデータ、Mongo、Ravenなどのテクノロジーに対する考慮の欠如などを考慮すると、これは本当に珍しくて正統ではないことがわかりました。

誰かが以前にそのようなシナリオに遭遇したことがありますか?参照データ用に設計され、外部キーを必要としないSQL ServerでNoSQLアプローチを採用するのはなぜですか?

28
Andy Clark

彼はデータベーススキーマをレビューしたとき、これはビジネスロジックであり、ビジネスレイヤー内で適用する必要があるため、すべての外部キーおよびその他のそのような制約を削除する必要があると述べました。

それから彼はばかです、そしてあなたのコードベースからのいくつかの抜粋はおそらく The Daily WTF いつか終わるでしょう。彼のアプローチが意味をなさず、率直に言っても彼の説明が意味をなさないのはあなたの言うとおりです。

参照整合性制約は「ビジネスロジック」ではないことを彼に説明してみてください。 独自の検証機能を備えた正当性の標準です。ビジネスロジックは、データをどのように処理するかに関するものです。 integrity は、データ自体が破損していないことを確認することです。それでもうまくいかない場合は、まあ、彼が担当します。あなたは彼の計画に沿っていくらかのダメージを軽減しようとするか、より良い職場を探し始めることができます。 (または両方。)

74
Mason Wheeler

外部キーを作成する理由がまだありません

- ジョエル・スポルスキー

包括的なステートメントは別として、一意性または外部キーの制約を使用しないことを選択した正当かつ強力な理由があることを認める価値があります。ほとんどは次のようになります:

  • パフォーマンス。アトミックトランザクションで整合性チェックを行うことは自由ではありません。そして頻繁に、データベースはあなたのアーキテクチャの拡張が最も難しい部分です。おそらく、アプリケーションロジックで既にチェックを行っており、2回目のパフォーマンスヒットを引き起こさない方がよいでしょう。
  • 必要性の欠如。おそらくデータがダーティであり、それで大丈夫です。これはあなたが何をしているかに大きく依存します。

参照 外部キーの何が問題になっていますか?


しかし、それらはあなたの質問の理由と一致しません。

これはビジネスロジックであり、ビジネスレイヤー内で適用する必要があります。

この理由は少し奇妙です。一意性とその他の整合性の制約は、非常にACIDデータベースのドメインです。アプリケーションコードは、SQLServerの原子性と整合性の保証に近づくことはできません。強力なデータ整合性が必要な場合、データベースを無視するのはばかげています。

2番目の議論は、データストレージにNoSQLアプローチを採用することを望んでいるため、そのような制限を設けたくないということです。

2番目の理由は、実際には理由ではありません。それは結論です。制約は正確さとパフォーマンスの間のトレードオフであり、NoSQLデータベースは後者に偏っています。


おそらく、あなたのシステムアーキテクトはこれらの正当な理由を念頭に置いており、あなたは誤って聞いたことがあるでしょう。または多分彼は不気味なばかです。

いずれの場合も、一意性と外部キー制約の使用を控える正当な理由があります(ではないですが)。

追伸外部キーが不要であると結論付けた場合でも、リレーショナルデータベースを使用してもかまいません。一般化として、リレーショナルデータベースは、対応するNoSQLのデータベースよりも成熟しています。単一のノードとして、それらは faster にすることもでき、NoSQL抽象化は それらの上に構築される にすることもできます。

2
Paul Draper