私はデータベースを設計している最中であり、最初の設計決定について再考しています...
製品タイプは次のとおりです...モデル、部品、交換部品キットおよびオプション。
オプションA(最初の設計):上記の製品タイプ用に別々のテーブルを用意する予定でした。各テーブルでフィールドの約75%が同じになると思います。
それらの間に作成する必要がある関連付けのため、各製品タイプを個別のテーブルとして作成しました。たとえば、モデルには多くのオプションがあり、オプションには多くのモデルがあります。オプションには多くのパーツを含めることができ、パーツには多くのオプションを含めることができます...など...
オプションB:個別のテーブルを作成する代わりに、モデル、パーツ、交換パーツキットおよびオプションを含むProductというテーブルを作成できます。モデルやオプションなどを区別するために、typeというフィールドを1つ持つことができます。特定の製品タイプでは、いくつかのフィールドが使用されない(nullのままになる)ことになると思います。私はこれが「ベストプラクティスではない」が出てくる場所だと推測しています。
オプションBは、db設計の複雑さを大幅に軽減します。また、クエリのためにデータを引き出すときに、大量のテーブルを参照することを心配する必要もありません...