문제

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 -->

다시 말해, 다형성 연관성을 작동시키는 방법은 참조 방향을 되돌리는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top