基本的に列挙値に VARCHAR を使用することがよくあります。それらを別のルックアップ テーブルに抽出し、整数 ID を外部キーとして使用するのが賢明な場合が多いことはわかっていますが、他のテーブルがそれを使用していない場合があり、別の JOIN が必要ないため、それらを保持することを選択しますメインテーブル。
問題は、そのような列をマークし、内部ルックアップ テーブルを使用してスペースを節約し、クエリのパフォーマンスを向上させることができる DB 機能があるかどうかです。Postgres のENUMsに似ていますが、前もって可能な値を明示的に宣言する必要はありません。
たとえば、INSERT を実行したいとします。
INSERT INTO table (date, status) VALUES ('2011-01-25', 'pending');
複数の行に同じ値が含まれて'pending'
いても、実際の文字列のインスタンスを 1 つだけ保持して、内部的に整数として扱われます'pending'
。
一部のプログラミング言語 (LISP、Ruby) では、同様の機能をシンボルと呼び、事実上「名前付き整数」と呼んでいます。
私は主に Postgres と MySQL に興味がありますが、他のポインタも同様に高く評価されます。