[解決済み] テーブルを増やすか、カラムを増やすか、どちらが良いデータベース設計か?
2023-06-17 18:33:20
質問
以前の同僚が、より少ないテーブルでより多くのカラムを持つデータベースは、より少ないテーブルでより多くのカラムを持つデータベースよりも優れていると主張していました。 たとえば、名前、住所、都市、州、郵便番号などの列を持つ顧客テーブルではなく、名前テーブル、住所テーブル、都市テーブルなどを持つことになります。
彼は、この設計がより効率的で柔軟であると主張しました。 おそらく、より柔軟なのでしょうが、私にはその効率についてコメントする資格はありません。 たとえより効率的であったとしても、追加された複雑さによって、それらの利益が打ち消されるかもしれないと思います。
では、より少ない列でより多くのテーブルを作成することは、より多くの列でより少ないテーブルを作成することよりも重要な利点があるのでしょうか?
どのように解決するのですか?
私はデータベースを設計するときに従ういくつかのかなり単純な経験則を持っていますが、これはこのような決定をするのに役立つと思います...。
- 正規化を支持する。非正規化は、必要なすべてのトレードオフを伴う最適化の一形態であり、そのようなものとして、次のような方法でアプローチされるべきです。 YAGNI の態度で臨むべきです。
- データベースを参照するクライアントコードがスキーマから十分に切り離されていることを確認し、それを再調整することでクライアントの大規模な再設計が必要ないようにします。
- パフォーマンスやクエリの複雑さに明らかな利点をもたらす場合は、非正規化を恐れないでください。
- スキーマのコアを非正規化するのではなく、ビューや下流テーブルを使用して非正規化を実装します。 データ量と使用シナリオが許す限り、非正規化を行う。 .
これらのルールの通常の結果は、最初の設計では、冗長性を排除することに重点を置いて、列よりもテーブルを優先することです。 プロジェクトが進行し、非正規化ポイントが特定されると、全体的な構造は、他の価値ある利点と引き換えに、限られた冗長性と列の増殖で妥協するバランスに向かって進化するでしょう。
関連
-
[解決済み】識別関係と非識別関係の違いとは?
-
[解決済み] ATTACHで開いたSQLiteデータベースファイルのテーブルを一覧表示するにはどうすればよいですか?
-
[解決済み】多言語データベースのためのスキーマ
-
[解決済み] データベースの設計に外部キーは本当に必要なのか?
-
[解決済み] データベースとファイルシステムストレージ
-
[解決済み] Neo4jでデータベースを削除/作成する方法は?
-
[解決済み] MS Accessの代替となるフリーソフト [終了しました]。
-
[解決済み] DynamoDBからアイテム数を取得するには?
-
[解決済み] 外部キーとしてカラムを追加すると、外部キー制約で参照されるカラムが存在しないERRORが表示される
-
[解決済み] データベースからdjangoのモデルを生成することは可能か?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] データベースの設計に外部キーは本当に必要なのか?
-
[解決済み] 変更履歴/監査データベーステーブルの最適なデザインは?[クローズド]
-
[解決済み] SQLITE SQLダンプファイルをPOSTGRESQLに変換する
-
[解決済み] 非リレーショナルデータベース設計【終了しました
-
[解決済み] Neo4jでデータベースを削除/作成する方法は?
-
[解決済み] テーブルのネーミング。アンダースコアとキャメルケース、名前空間?単数形と複数形?
-
[解決済み] 外部キーとしてカラムを追加すると、外部キー制約で参照されるカラムが存在しないERRORが表示される
-
[解決済み] データベースで月額課金システムを設計するためのグッドプラクティス【終了しました
-
[解決済み] Postgresqlサーバーのpostgresという名前のデフォルトのデータベース
-
[解決済み] HiveQLクエリの結果をCSVに出力するにはどうしたらいいですか?