2

私はSMFフォーラム、PhpBB、またはVBulletingフォーラムなどのいくつかの重要なフォーラムを調べていましたが、それらが3番目のFNにないことに気付きました。

それらには多くのNULLフィールドがあります。たとえば、SMFフォーラムでは、メンバー行でこのすべての列をNULLにすることができます。

pm_ignore_list, messageLabels, personalText, websiteTitle, websiteUrl, location, ICQ, AIM, YIM, MSN, timeFormat, userTitle, notifyAnnouncements, secretQuestion, secretAnswer, validation_code, additionalGroups, smileySet

つまり...テーブルの任意の行でNULLになる可能性のある18個のフィールドを考えてみましょう。それは3番目のNFではありません...

なぜ彼らはそれをするのですか?彼らはBDについてよく知っていると確信しています...ありがとう。

4

2 に答える 2

6

非正規化の最大の理由はパフォーマンスです。これは、多くのディスカッションフォーラムで悪名高い問題です。

もともとSQLは階層データを簡単に格納するように設計されておらず、この制限を回避しようとする最適とは言えないスキーマ設計が数多くあります。

于 2012-04-19T16:06:44.463 に答える
1

これらの理由の1つ以上が当てはまる可能性があります。

  • データベースはまったく「設計」されていませんでした。それに取り組んだプログラマーが1つ追加することを決定したため、徐々に列が増えていきました。(プログラマーは、データベース設計について最小限のトレーニングしか受けていないことがよくあります。)

  • このような「デザイン」は、委員会の決定の結果です。(上記を参照。)

  • 「設計」は最良のアイデアではないことが知られていましたが、ソフトウェアを出荷するために実装されました。根底にあるファンタジーは通常、次のリリースの前に適切に修正することです。(多くの場合、修正されることはありません。)

  • SELECTのパフォーマンスを向上させるために、テーブルは非正規化されました。ただし、私の経験では、SELECTの速度は通常、高度な正規化よりも、a)ID番号の乱用、およびb)正規化の誤解に悩まされています。

于 2012-04-19T16:23:43.830 に答える