0

私が現在追求しているこのデータベース設計が健全であるかどうかについて、いくつかの意見が欲しいです。

「Home」というテーブルを作成しているとしましょう。このテーブルには「rooms」というテキストフィールドがあります。このフィールドには、この家にある一連の部屋のシリアル化されたデータがあります。もちろん、私の最初の本能は、このデータを別の「部屋」テーブルに正規化することでした。ただし、過去に過度に正規化されたデータベースでの苛立たしい経験のために、私は自分自身にいくつかの質問をするのをやめました。

  1. 特定の部屋を探す必要がありますか?
  2. 個々の部屋を更新する必要がありますか?
  3. ホームレコードでルームレコードを共有することはありますか?

これらの質問のそれぞれに対する答えは「いいえ」です。部屋の記録はすべて、各ホームに固有のものです。たとえば、データベース内にバスルームがある家の数を調べるためにクエリを実行する必要はありません。データは常にホームの観点から取得されます。ベッドルームとバスルームの数は、検索のためにホームレコードに明示的に保存されます。

そのため、常にRoomsに参加する代わりに、このデータをシリアル化してテキストフィールドにポップするだけで何が害になるのか疑問に思いました。

これは私には非常に理にかなっていますが、健全性チェックを望んでいます。ご入力いただきありがとうございます。

4

4 に答える 4

3

さて、あなたは今日、次のようなものを見つけるためにクエリを実行する必要がないかもしれません:

  • オハイオ州の家のバスルームの平均数はいくつですか?
  • 家にはもっと寝室がありますか?東海岸または西海岸?
  • 住宅価格は主寝室のサイズとどのように相関しますか?マスターベッドルームのサイズを30%増やした場合の平均的なドル価値のリターンはどれくらいですか?

などなど。

基礎を最初から正しく設計すれば、将来的にははるかに良い立場に立つことができます...現在、ショートカットがどれほど魅力的に見えても。

さらに、別のROOMSテーブルを使用すると、後で意味のある部屋のフィールド(幅/高さ、色、床の高さなど)を追加できます。これは、データを1つにまとめただけでは非常に困難です。分野。

人々は、次のような予期しない方法でクエリを実行したいと思うでしょう。

  • ひざが悪い。マスターベッドルームとマスターバスルームが1階にある家をリストアップできますか?

一般に、ROOMSテーブルがあると、アプリケーションがより強力になり、使いやすくなります。

ねえ、私はあなたが「過度に正規化されたデータ」について言っていることを理解します。私たちは皆そこにいました、そしてそれは噛みつきます。ただし、住宅情報を含むデータベースにROOMSテーブルがあることは、「過度に正規化」されていません。アプリを正しい方法で構築しているだけです。

于 2011-01-05T16:11:53.820 に答える
3

実用的な答え...

  • a)将来それを分解したいと思うかもしれない確率
  • b)今はそうしないことの利点
  • c)後でスキーマを変更するコスト。

もしそうならa * c > b、あなたは今分解するべきです。

于 2011-01-05T16:17:25.850 に答える
1

他の人が正しいことをすることについて言ったことに加えて、私はパフォーマンスについてのコメントを追加したいと思います。

シリアル化された部屋のデータをテーブルHomeの列として保存するため、行のサイズが大幅に増加します。これにより、他のすべてのクエリのパフォーマンスが低下します

于 2011-01-05T16:40:39.060 に答える
0

さて、あなたは部屋の記録がユニークであると言います、しかしあなたはそれを強制することはできません。したがって、現在の設計ではこれを確実に知る方法はありません。すべてのコードは、これを表現するのに完璧でなければなりません。

「常に参加する」ことはそれほど難しいことではありませんが、そうであれば、いつでもそのためのビューを作成することができ、それで完了です。

于 2011-01-05T16:08:32.417 に答える