一度に 1 つずつ質問を受け付けます。
ソフトウェアでエンティティ グループをどのように参照する必要がありますか? IDまたは名前をハードコーディングしますか?
コードが最も読みやすい方法でエンティティ グループを参照してください。したがって、おそらく名前を使用するか、名前のように見えるが値が id である定数を使用する可能性があります。定数を使用すると、エンティティをグループ タイプ別に検索するときに 1 つの結合を回避できますが、通常、これはあまり問題になりません。
なぜDBにそのテーブルが必要なのですか? これは私のデータを構造化する間違った方法ですか?
これは、データを構造化するのに完全に受け入れられる方法です。最も正しい方法は、データで何をしているかによって異なりますが、ほとんどのアプリケーションでは、構造が正しいでしょう。ただし、データベースにそのテーブルは必要ありません。代わりに、entity_group テーブルに「group_type」フィールドを作成できます。長所と短所は次のとおりです。
現在の構造の利点:
- entity_group_type を説明するフィールドを簡単に追加できます。たとえば、一部のグループ タイプを管理者ユーザーのみが表示できるようにしたり、無効にしたりしたい場合があります。これが将来の可能性である場合、このデータベース構造が必要になります。
- データベース ソフトウェアに参照整合性を適用させる機能。つまり、entity_group テーブルと entity_group_type テーブルの間でデータの一貫性が保たれます。
entity_group テーブルに group_type フィールドを追加する利点:
- おそらく、コード内のより単純な表現です。たとえば、MVC アーキテクチャを使用する場合、追加のテーブルを使用するには、コード内に別のモデル オブジェクトが必要になる場合があります。これは通常は問題ではなく、利点もあるかもしれませんが、シンプルな方が良い場合もあります。
- エンティティ グループ タイプごとにエンティティを検索する場合、関連するテーブル/結合が 1 つ少なくなるため、SQL ステートメントはわずかに単純になります。
データの使い方にもよりますが、ほとんどの場合、現在の構造が先行していると思います。データを別の方法で構造化する正当な理由がない限り、現在の構造に固執します。