web-dev-qa-db-ja.com

複数の類似テーブルと1つのマスターテーブル

私はWebアプリの開発者であり、データベース設計の経験が少ないので、どなたかご意見をいただければ幸いです。

このWebアプリを初めて作成したとき、アプリは少数のプロパティ(列)を持つ1種類のオブジェクト(テーブル)を管理していました。アプリが成長するにつれて、非常に類似したオブジェクトのタイプが追加されたため、オブジェクトタイプごとに追加のテーブルを作成しました。 (すべてのオブジェクトタイプは同じクラス/プロトタイプから継承すると言えます。)各オブジェクトタイプが同じプロパティタイプの約90%を共有しているため、各オブジェクトタイプのテーブルはすべてほぼ同じであることがわかりました。たとえば、テーブルにはほぼ同じ列名(&データ型)があるかもしれませんが、1つのテーブルには、そのオブジェクトタイプに固有のプロパティを参照するために、1〜2個の追加列がある場合があります。

すべてのオブジェクトタイプが非常に似ているため(Dog、Cat、およびMouseがすべてAnimalクラスから継承されるのと同じように)、これらすべてを同じテーブルに配置し、一部の列にNULL値を含めることを許可するのが賢明でしょう。列はそのタイプに関連していませんか?それとも、私が考慮していない他の代替案はありますか?

参考までに、これまでに確認した同様の投稿をいくつか紹介します。

1) 複数の「タイプ」テーブルがある場合の代替設計

2) https://stackoverflow.com/questions/9021838/database-design-multiple-tables-vs-a-single-table

3) データベース設計:複数の同一のテーブルを分割する、良いか悪いか?

5
jake

すべての動物が共有する情報を含むAnimalテーブルを作成します。 Animalテーブルにtypeまたは同様の名前の別の列を追加します。ここでは、動物が猫、犬、マウス、または何であるかを指定します。

次に、Cat ID(主キー)を外部キーとして持つDogMouse、およびAnimalテーブルを作成します。これらの各テーブルには、猫、犬、マウスに固有の列があります。 Mouseテーブルには列Favorite_cheeseなどの通常の動物のテーブルにはありません。完全なマウスレコードを取得するには、2つのテーブルを結合できます。

これにより、サブクラス化機能をサポートしながら、比較的無駄のないAnimalテーブルを作成できます。

6
Paarth