Я разрабатываю bd-схему для mysql. Моя база данных хранит 3 вида точек: a, b или c, а путь состоит из n пар точек:
Маршрут = [(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
Итак, я храню пару точек вместе с идентификатором их пути. Моя проблема заключается в том, что мне пришлось создать два столбца, идентифицирующих имена таблиц m и n. table_from для m и table_to для n. Таким образом, мне пришлось бы использовать эти два столбца в моем коде, чтобы узнать, какие типы точек сохраняются на маршруте (таблица path и point_pairs). Мой вопрос: предоставляет ли MySql что-то для ссылки на n внешних ключей в том же столбце? Я уже думал о присоединении таблиц точек a, b и c, но мне пришлось бы добавить столбец типа в эту новую таблицу, и мои классы php стали бы бесполезными.
Заранее спасибо!