DBテーブルのステータス関連フィールドを設計するには、次のアプローチが可能です。
アプローチ01:
- 'VARCHAR'をデータ型として使用します。
- 直接ステータスは、NEW、IN PROGRESS、CLOSEDのように保存されます
制限:
- テーブル内の文字列を検索するには、常により多くの時間とリソースが必要です
- 既存のステータステキストを変更すると(例:「クローズ」から「完了」)、テーブル全体を更新する必要があります
アプローチ02:
- ステータスルックアップテーブルを作成する
- 依存テーブルの外部キーとしてステータステーブルを使用する
制限:
- 外部キー関係の維持
- アプリケーションの関連するすべてのクエリにJOINを使用する必要があります
アプローチ03:
- ステータスフィールドにはshort(または)intを使用します
- アプリケーションインタフェース(EJB)でENUMを使用してステータステキストを更新します
これにより、以前のアプローチの制限が解決されます
制限:
- 整数を関連するステータスにマップする必要があります(ただし、テキストの代わりに列挙型を使用する方が適切です)
3番目のアプローチは次の点でより効率的だと思います*DBインデックスの高速化*varcharの代わりに(または)intフィールドが短いため検索が高速化*もちろんメモリフィンガープリントが少なくなります
柔軟性、メンテナンス、パフォーマンスの観点から、3番目のアプローチの落とし穴があるかどうかアドバイスしていただけますか?
前もって感謝します