私はmysqlのbdスキームを設計しています。私のdbはa、b、cの3種類の点を格納し、経路はn点の組で構成されます:同じ列の外部キーの参照
Route = [(a1またはb1またはc1; a2またはb2またはc2)、(a2またはb2またはC2、A3またはB3またはC3)、...]
create table a_points (
point_id serial not null,
owner_id bigint unsigned not null,
name varchar(20) not null,
primary key (point_id),
foreign key (owner_id) references othertable (other_id)
) engine = InnoDB;
create table b_points (
point_id serial not null,
owner_id bigint unsigned not null,
name varchar(20) not null,
fields varchar(20) not null,
primary key (point_id),
foreign key (owner_id) references othertable (owner_id)
) engine = InnoDB;
create table c_points (
point_id serial not null,
name varchar(20) not null,
cfields varchar(20) not null,
primary key (point_id)
) engine = InnoDB;
create table paths (
path_id serial not null,
name varchar(20) not null,
primary key (path_id)
) engine = InnoDB;
create table point_pairs (
pair_id serial not null,
path_id bigint unsigned not null,
point_from bigint unsigned not null,
point_to bigint unsigned not null,
table_from varchar(9) not null,
table_to varchar(9) not null,
primary key (pair_id),
foreign key (path_id) references paths (path_id)
) engine = InnoDB;
(*)点の対は(M、N)またはMからN
にだからポイントのペアを格納していていますパスのIDとともに私の問題は、mとnのテーブルの名前を識別する2つの列を作成しなければならなかったことです。 mはtable_from、nはtable_toです。したがって、ルート(pathとpoint_pairsテーブル)にどのようなポイントが保存されているかを知るには、これらの2つのカラムをコードで使用する必要があります。私の質問:MySqlは同じ列のn個の外部キーを参照するための何かを提供しますか?私はすでにa、b、cのポイントテーブルに参加することを考えましたが、この新しいテーブルにタイプカラムを追加しなければならなくなり、PHPクラスが役に立たなくなります。
ありがとうございます!
これは、私が他の議論で「汎化特化パターン」と呼んできたことの素敵な要約です。私は多態性協会について学ばなければならないでしょう。 –
@Walter Mitty:先日あなたが言いました。私はあなたのためにそのフレーズを使用する唯一の人だと思います。 Polymorphic Associationsは、Hibernate、Ruby on Railsなどで使用される用語です。 –
GUIDを 'a_points'、' b_points'、 'c_points'に' PRIMARY KEY'として使用し、同じGUIDを'common_points'の' PRIMARY KEY'ですか?そのようにして、私はすべての多形性結合の仲介者として働くことができる1つのテーブル 'メタ'を持つことができます。 – paulkon