Open4
【DB設計】SQLアンチパターンについて
SQLアンチパターン(失敗パターン・失敗事例)とは?
- SQLアンチパターンは、データベース設計やSQLの記述において避けるべき一般的な間違いや誤った実践を指します。
- これには、非効率的なクエリ、データ整合性の問題、スケーラビリティの問題など、様々な問題が含まれます。
- 例えば、NULLを適切に扱わない、適切なデータ型を使用しない、過度に複雑なクエリを書くなどが挙げられます。
- これらのアンチパターンを避けることで、より効率的で、メンテナンスしやすく、信頼性の高いデータベースシステムを設計することが可能になります 。
アンチパターンとは?
- アンチパターンとは、ソフトウェア開発におけるよくある失敗パターンを整理し、それを回避する方法をまとめたものです。
- SQLはデータベースと違い、厳密性よりもパフォーマンスやバグに関する問題点が浮上しやすいことが特徴です。
SQLアンチパターンの種類
SQLアンチパターンには、次のようなものがあります。
- 主キーの規約を確立することを目的として、UNIQUE制約を貼ったサロゲートキーではなく複合キーを用いれば重複を回避できるケース
- ポリモーフィック関連
- テーブルスキャンと呼ばれる手法
- 複数のテーブルと関連をもたせるために、親テーブルの名前を格納するカラムを作成する
参考・引用
SQLアンチパターンのEAV(Entity-Attribute-Value)について
EAV(Entity-Attribute-Value)とは?
- EAV(Entity-Attribute-Value)は、属性と値の対応関係を表すテーブルです。
- EAVは、属性が動的かつ多様であるようなデータを効果的に保存する方法として使用されます。
- 特に、属性の数や種類が固定されていない場合に有用です。
- ただし、EAVモデルはいくつかのメリットとデメリットを持っているため、適切な使用場面を選択する必要があります。
- EAV では、エンティティ(データベース内で区別される対象やオブジェクト)、属性(エンティティに関連する特性や情報の名前)、値(エンティティの属性に対応する実際のデータ)の3つの要素を持つテーブルを使用してデータを保存します。
- ここでは、 製品名、価格、サイズ、在庫数、人気度の5つの属性を持つデータをいくつか示しています。各エンティティ(EntityID)に対して、それぞれの属性(Attribute)と値(Value)が関連付けられています。
- このように、データベース内でのエンティティと属性の数が多様であり、柔軟性が求められる場合に EAV は有用です。
参考・引用
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
【DB設計】柔軟なデータに対するテーブル設計とEAVについて