SQL Server内のNoSQL


28

この質問は、SQLとNoSQLの違いに関するものではありません。私は現時点では本当に理にかなっていない何かの理由を探しています(おそらく私の理解や感謝の欠如のため)。

MVC5、Entity Framework 6コード、SQL Server 2008を使用してゼロから新しいプロジェクトを開始しました。アプリケーションコードのビジネスレイヤー内で適用する必要があります。

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

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

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


21
システムアーキテクトとアドバイスの根拠について話し合ってください。彼はあなたの特定のケースに当てはまる非常に正当な理由(アプリが何で構成されているかを正確に知ることなく、必ずしも推測することができない理由)を持っています。
アルセニムルゼンコ

23
同様の方法で実装された多くのデータベースを見てきました:FKもCHECK制約もありません。データベースアーキテクチャや参照整合性などについて何も知らない経験の浅いコーダーによって設計されたデータベースでした。単に彼が無能であると仮定する代わりに、あなたの同僚。
アルセニムルツェンコ

5
私は少し混乱しています。エンティティフレームワークの使用(最初のコード)に言及します...(C#の意味で)オブジェクトを作成し、それからエンティティフレームワークで同等のデータベースの構築を処理することを意味するわけではありません。 Entity Frameworkの裏をかこうとする演習(これは、マークトウェインが豚に歌を教えることを試みることについての引用のようなものですか?)
Foon

2
「アーキテクト」と主張する人が多すぎますが、実際には、より大きなシステムのコーディングや保守の経験はありません。
Doc Brown

2
関連:thedailywtf.com/articles/The-Mythical-Business-Layer。「考えてみれば、ソフトウェアアプリケーションの実質的にすべてのコード行はビジネスロジックです。」これはデータベースにまで及びます。「しかし、アプリケーションのコードのほとんどすべてがビジネスロジックになることを念頭に置くことは、同じくらい重要です。既に十分なツールがあります。アプリケーションにはジェネリックレイヤーは必要ありません」(エンファシスマイニング)。これを推奨している人は、おそらくデータベースをそのような一般的なレイヤーに変えようとしているでしょう。要するに、彼らは流行語を現実よりも優先している可能性が高いのです。
jpmc26

回答:


74

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

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

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


17
私は、建築家がこれをしているかもしれない(まともな)理由を見つけようとした少し外交的な答えがありました。冷静に考えて、私は代わりにこの答えで参加しています。
Blrfl

7
おっ、おっと、悪いアーキテクチャの試みがどこか他の場所で仕事をする理由ですか?くそー、その見方をすれば、どこでも仕事を続けることができなかっただろう。
クズカイ

5
@Kzqaiには、建築家が基本的に建築を誤解している人もいます。これはディレクティブ595のように聞こえますが、はい、誰かがハンマーを使って木片にネジを入れるように強制したい場合、ツールを誤用して何かを構築することを強制しない人を見つけるでしょう。

4
参照整合性は、データベース理論の中心的なトピックであり、実世界でそれをサポートするすべてのデータベースは言うまでもありません。明らかに、アンディの同僚は彼の分析において正しいです。学界と専門家の世界の残りは100%間違っています。The Daily WTFに言及した場合ボーナスポイント。

2
@AndyClarkこれをやめる必要があります。理由は、それがあなたの会社の中核にある核時限爆弾だということです。糞便が人工呼吸器に衝突するのは時間の問題です。それが起こるとき、あなたは仕事を探している72時間のシフト、最悪の場合のシナリオで働くことは幸運でしょう...あなたが収入を持っているときに仕事を探すのが良いでしょう。
-ArTs

2

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

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

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

  • パフォーマンス。アトミックトランザクションで整合性チェックを行うことは無料ではありません。また、多くの場合、データベースは拡張が困難なアーキテクチャの一部です。おそらく、アプリケーションロジックで既にチェックを行っており、2番目のパフォーマンスヒットを負わせないでしょう。
  • 必要性の欠如。おそらくあなたのデータが汚れていて、それでいいのです。これはあなたが何をしているかに大きく依存します。

参照してください。外部キーが悪いのか?


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

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

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

2番目の議論は、彼らがデータストレージにNoSQLアプローチを採用したいので、そのような制限を実施したくないということです。

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


おそらく、システムアーキテクトはこれらの正当な理由を念頭に置いており、あなたは聞いたことがないでしょう。または多分彼はとんでもない馬鹿です。

いずれにせよ、一意性と外部キー制約の使用を控える有効な(普遍的ではないが)理由があります。

PS外部キーが必要ないと判断した場合でも、リレーショナルデータベースを使用しても大丈夫です。一般化として、リレーショナルデータベースは、NoSQLの対応データベースよりも成熟しています。単一のノードとして、それらはさらに高速であり、それらの上に NoSQL抽象化を構築できます


12
ジョエルはバカではないが、ポッドキャストでの機知に富んだ返信は、説明なしで、私見では、バカからの声明よりもさらに価値がないと私は思います。
マーティンバ

11
Joelはスプレッドシートの男であり、データベースの男ではないので、標準的なリレーショナルデータベースの慣行に対する彼の無知は、驚くべきことではないでしょう...攻撃はありません、Joel。:-)
エリックキング

3
Joelのコンテキスト内の実際の引用は、LINQなどの技術であり、外部キーの設定を煩わせる理由を提供します。Joelはデータベース管理者ではありません。彼のブログを検索し、長年の読者であることから、この件について話したり、データベースの最適化、データモデルの設計などに関するアドバイスをしようとする彼からは何も見つかりません。 、しかし、彼は今ではないし、今までにない-またはそうであると主張した!-データベースまたはデータモデリングの分野の専門家。それは、複利についてアインシュタインを引用するようなものです。つまり、サンドイッチです。(XKCDの参照、あなたしている歓迎。):)
BrianH

4
ジョエル・スポルスキーは、物議を醸す強い意見を持っていることで知られています。FogBugzが独自の言語で書かれていることを参照してください。依存性注入は複雑すぎます (ところで、これは閉じる前にStackoverflowで最も物議を醸す答えでしXMLデータベースは遅いです。など
BlueRaja-ダニーPflughoeft

2
@BlueRaja:うーん... XMLデータベース、特にリレーショナルデータベースに比べて時間かかります。いつ物議をかもしたのですか、それとも意見ですか?
メイソンウィーラー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.