2017-03-22 15 views
0

기본적으로 한 열에 저장할 수있는 간단한 정보가있는 첫 번째 테이블이 있고 두 번째 테이블은 큰 2-D 배열입니다.테이블의 기본 키 INT를 사용하여 MySQL의 다른 테이블 이름을 참조 할 수 있습니까?

첫 번째 테이블의 각 열은 2 차원 배열의 모든 데이터에 해당하므로 두 번째 테이블의 모든 행에 대해 첫 번째 테이블 정보를 반복하고 싶지 않으므로 기본 키를 만들고 싶습니다. 두 테이블을 연결합니다.

두 번째 테이블의 모든 데이터가 첫 번째 테이블에 해당되므로 두 테이블을 연결하는 값 대신 테이블 이름 자체를 사용할 수 있으면 좋을 것입니다.

이것이 가능합니까? 필자는 외래 키 값이 다른 테이블의 기본 키와 일치한다는 것을 본 적이 있습니다.

+0

, 그래서 아니, MySQL은 외국 키를 지원하지 않습니다 그. – tadman

+0

감사합니다. 다형성 연관을 지원하는 확장 가능한 데이터베이스를 추천 해 주시겠습니까? –

+0

MySQL은 외래 키가 기본 키와 일치 할 것을 요구하지 않지만이를 사용하는 가장 일반적인 방법입니다. – Barmar

답변

2

MySQL은 외부 키가 기본 키를 참조 할 필요가 없으며 고유 키 일 필요조차 없습니다. 색인 만 있으면됩니다. 따라서 두 번째 테이블은 2 차원 배열의 각 행에 대해 고유하지 않은 array_id 열을 가질 수 있으며 첫 번째 테이블은 이에 대한 외래 키를 가질 수 있습니다.

CREATE TABLE table1 (
    id INT PRIMARY KEY, 
    notes INT, 
    time INT, 
    ..., 
    CONSTRAINT (notes) FOREIGN KEY REFERENCES table2 (array_id), 
    CONSTRAINT (time) FOREIGN KEY REFERENCES table2 (array_id), 
    ... 
); 

CREATE TABLE table2 (
    array_id INT, 
    row INT, 
    column INT, 
    value INT 
    PRIMARY KEY (array_id, row, col) 
); 

그래서 당신은 table1에서 특정 행에 관련된 notes 배열을 얻으려면, 당신은 할 수 있습니다 :

다형성 협회의
SELECT t2.* 
FROM table1 AS t1 
JOIN table2 AS t2 ON t1.notes = t2.array_id 
WHERE t1.id = @id 
+0

이 정보가 도움이된다고는 생각하지 않습니다. 나는 테이블에 전혀 가입하고 싶지 않습니다. 첫 번째 표를 측정 목록으로 생각할 수 있습니다. 측정 ID가 1 열인 것으로 가정 해 봅시다. 내 두 번째 테이블은 실제 측정 값의 2 차원 배열입니다. 템플릿을 사용하여 새 테이블을 만들고 각 테이블의 이름을 첫 번째 테이블의 측정 ID로 지정할 수 있습니까? –

+0

몇 가지 샘플 데이터와 사용 방법을 보여 달라. 당신은하지 않았습니다. 그래서 저는 당신이하는 일을 알아 내려고 노력했습니다. 더 나은 답변을 원하면 더 좋은 질문을 올리십시오. – Barmar

+0

각 2D 배열에 대해 서로 다른 테이블 2를 많이 사용하는 것에 대해 이야기하고 있습니까? 저조한 디자인입니다. 내가 원하는 특정 배열을 나타 내기 위해 ID와 함께 하나의 테이블에 모든 것을 넣으십시오. – Barmar