2014-10-28 2 views
2

MySQL 사용 이미 데이터베이스에 업로드 된 데이터를 사용하여 1 대 다수 관계를 설정하려고합니다. 예를 들어, 하나의 테이블에 이름 목록이 있고 그 목록을 그들이 있던 곳의 목록에 연결하고 싶다고합시다. 분명히 1 명이 여러 곳으로 갈 수 있지만이 문제를 해결하는 데 문제가 있습니다.N-M 관계 설정 문제

 -------city---------ID--------- 
      New York  1 
      Chicago   2 
      Orlando   3 
      LA    4 
     ------------------------------- 

나는 이런 식으로 뭔가를 찾고 있어요 :

 -----Name-----------ID--------- 
      John Smith  1 
      Joe Random  2 
      Seth Guy  3 
     ------------------------------ 

I는 다음과 같이 할 다른 테이블이

 --------Name--------City---------- 
      John Smith Chicago 
      John Smith Orlando 
      John Smith New York 
      Seth Guy  Chicago 
      Joe Random LA 
     ------------------------------------ 

내가 분명히 존 스미스는 모든되었음을 알 3 개의 위치는 내가 업로드 한 원본 파일이 나에게 그렇게 말하기 때문에,하지만 나는 데이터베이스가 그 연결을 만들고 그에 따라 배치하기를 원한다.

+4

귀하의 관계는 1-n이 아닌 n-m입니다. 한 사람은 여러 장소에 갈 수 있습니다. 많은 사람들이 한 곳을 방문 할 수 있습니다. –

+2

'person_id'와'city_id'를'visited'라고하는 다른 테이블이 필요합니다. 그러면 다 대 다 관계를 가질 수 있습니다. –

답변

2

주석에서 언급했듯이 이것은 1-N 관계가 아니라 N-M 관계입니다. 당신은 방문을 기록하기 위해 추가 "매핑"테이블이 필요합니다 조인의

CREATE TABLE visits (
    person_id INT, 
    city_id INT, 
    CONSTRAINT visits_pk PRIMARY KEY (person_id, city_id) 
); 

그런 다음이 부부와 함께 모든 방문을 조회 할 수 있습니다

SELECT person.name, city.name 
FROM person 
JOIN visits ON person.id = visits.person_id 
JOIN city ON visits.city_id = city.id 
+0

오, 죄송합니다. 제 실수입니다. 나는 적절하게 질문을 편집 할 것입니다. 또한, 내가 당신의 대답을 구현, 아무것도, 빈 테이블을 표시하지 않습니다. – Jcmoney1010

1

이 관계를 유지하는 새 테이블을 소개합니다.

스키마는 다음과 같이 보일 것입니다 :

create table person (id, name) 
create table city (id, name) 
create table person_to_city (people_id, city_id) 

는 people_id 및 CITY_ID에 외래 키 제약 조건을 만듭니다.