私は古い学校に育ちました-アプリケーションのビジネスレイヤーの前にデータベーススキーマを設計することを学びました(または他のすべてにOOADを使用しました)。私はスキーマ(IMHO :)の設計にかなり長けており、不必要な冗長性を削除するためだけに正規化しましたが、速度に影響を与える場所ではありません。つまり、結合がパフォーマンスに影響した場合、冗長性はそのまま残されました。しかし、ほとんどそうではありませんでした。
RubyのActiveRecordやActiveJDBCなどのいくつかのORMフレームワークの出現により(覚えていないが他にもいくつかありますが、たくさんあると確信しています) 「メール」-2NFを完全に破壊します。さて、あまり理解していませんが、これらのORM(またはプログラマー)の一部が1-1または1-0 | 1(つまり、1対0または1)を認識しないと、(ほとんど)緊張します。彼らは、nulls
「今日のシステムがそれを処理できる」という大量の情報がある場合でも、すべてを1つの大きなテーブルとして保持する方が良いと述べています。
メモリの制約は正規化と直接的な相関関係があることに同意します(他の利点もあります:)が、今日の安価なメモリとクアッドコアマシンでは、DB正規化の概念はテキストに残されていますか?DBAは3NF(BCNFではない場合)への正規化を実践していますか?それは重要ですか?「ダーティスキーマ」設計は本番システムに適していますか?それがまだ関連している場合、どのように「正規化」のためにケースを作るべきか。
(注:設計の一部/必要性として冗長性を備えたデータウェアハウスのスター/スノーフレークスキーマについてではなく、たとえばStackExchangeのようなバックエンドデータベースを備えた商用システムについてです)