같은 열에서 외래 키를 참조합니다
-
09-09-2019 - |
문제
MySQL 용 BD-Scheme을 설계하고 있습니다. 내 DB는 3 가지 종류의 점 : A, B 또는 C와 경로는 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 이름을 식별하는 두 개의 열을 만들어야한다는 것입니다. table_from m and table_to n. 따라서 코드 에서이 두 열을 사용하여 경로에 어떤 점이 저장되어 있는지 알아야합니다 (Path and Point_Pairs 테이블). 내 질문 : MySQL은 같은 열에서 n 이외의 키를 참조하기 위해 무언가를 제공합니까? 이미 A, B 및 C 포인트 테이블에 가입하는 것에 대해 생각했지만이 새 테이블에 유형 열을 추가해야하며 PHP 클래스는 쓸모가 없습니다.
미리 감사드립니다!
해결책
당신은 다형성 연관성이라는 패턴을 사용하고 있으며, 그렇지 않으면,이를 수행하고 외국 키를 사용하여 참조 무결성을 시행 할 수있는 방법이 없습니다.
공통 테이블 하나를 만드는 것이 좋습니다 a_points
, b_points
, 그리고 c_points
참조. 그러면 포인트 쌍이 해당 공통 테이블을 참조 할 수 있습니다.
a_points -->
b_points --> common_points <-- point_pairs
c_points -->
다시 말해, 다형성 연관성을 작동시키는 방법은 참조 방향을 되돌리는 것입니다.