2012-11-22 3 views
1

SQL Server를 사용하여 M : 1 관계를 만들어야하지만 "많은"쪽을 나타내는 열이 외래 키 여야하고 "한 쪽"을 나타내는 열이 기본이어야하는지 궁금해했습니다. 키. 목적은 "many"면을 나타내는 열이있는 테이블을 사용하여 "one"면을 나타내는 열이있는 테이블에서 정보를 검색하는 것입니다. 이 아이디어가 합리적이며 성공적으로 작동 할 수 있습니까? "다"쪽을 나타내는 열이 외래 키와 기본 키해야한다 "일"쪽을 나타내는 열을해야하는 경우SQL M : 1 관계

답변

1

것이 궁금했습니다.

많은면을 나타내는 열은 실제로 테이블의 기본 키이며 한면을 나타내는 열도 다른 테이블의 기본 키입니다. 그러나 그들 중 하나에 새로운 열이 있습니다. 서로를 연결하는 외래 키입니다 (이 열은 관계가 하나가되는 열이며, 이는 사용자가 신경 써야하는 열입니다).

그래서 두 테이블로 만들어야합니다. 다음을 예로 들어 보겠습니다.

국가 및 도시 관계 : 한 국가에 많은 도시가 있습니다.

은 두 개의 테이블로 표현 될 것이다 :

enter image description here

Countries :

  • CountryID 기본 키,
  • Name합니다.

Cities :

  • CityID 기본 키 1,
  • CountryId 외래 키 참조 Countries(ID),
  • Name.

그리고 그 다음과 같이 하나 개의 관계에 많은 만드는 방법입니다 :

  • CountryIDCityID은 두 테이블의 기본 키입니다.
  • 한면을 나타내는 열 CountryID은 많은면에서 외래 키 (cities 표)입니다.당신이 도시에 둘 이상의 나라에있을하려는 경우가 아니면당신은 Cities에 기본 테이블 대신 복합 키을 가져야한다 : 즉,

일해야하는 열입니다 동시에.

+0

당신 정말이 경우에 동일한 기본 키의 이름,'ID'와 테이블을 생성 촉진해서는 안된다 그것은 질의의 혼란을 만든다. 'countries'와'city_id' 키를 ​​호출하는 것으로서'국가'와'도시'를 예제로 제시했기 때문에 무엇이 잘못 되었습니까? 또한 도시가 하나 이상의 '국가'에 동시에 있기를 원하지 않는 한, '도시'에 합성 키가 있어야합니다. – Tony

+0

@ 토니 - 나는 기존 데이터베이스에서 내 대답에있는 다이어그램을 사용했습니다. 그러나 나는 최근에 LINQ to SQL과 Hibernate를 ORM으로 사용했기 때문에이 방법을 사용했습니다. 그래서'ID'는 프라이 머리 키로 사용되었습니다. 왜냐하면 응용 프로그램에서'City.ID'와'country.Id'가 될 것이기 때문입니다. 하지만 데이터베이스 쿼리에 해당하는 경우에 동의합니다. 그래서 칼럼리스트에서'CountryID'와'Cityid'를 사용했습니다. 이제 해결되었습니다. 감사합니다. –

+0

@ 토니 - 두 번째 요점은 예제 였고 디자인을 단순화하려고했습니다. –