x
、y
、およびの 3 つのテーブルがありz
ます。各テーブルの各行に任意の属性をアタッチできるようにしたいと考えています。x
、y
、およびには、すべて整数の主キーが呼び出され、任意の属性を関連付けることができるz
という事実以外に共通点は
ありません。id
のように、単一の属性テーブルを作成する方が良いですか?
create table attributes (
table enum('x', 'y', 'z'),
xyz_id integer,
name varchar(50),
value text,
primary key (table, xyz_id, name)
);
または、次のように個別のテーブルを作成するのが最善ですか
create table x_attributes (
x_id integer,
name varchar(50),
value text,
primary key (x_id, name),
foreign key (x_id) references x (id)
);
create table y_attributes (...);
create table z_attributes (...);
2 番目のオプション (個別のテーブル) はよりクリーンに見えますが、データベース側とアプリケーション側の両方でより多くのボイラープレートが必要です。
この2つ以外の提案も受け付けています。
注: MongoDB のようなドキュメント ストアを使用する可能性を検討しましたが、扱っているデータは基本的にリレーショナルです。