2012-03-15 3 views
2

데이터베이스 내에 두 개의 테이블을 생성 할 할당이 있습니다. 테이블은 이렇게 보입니다.한 테이블의 ID를 다른 테이블의 데이터로 연결

ContactPerson (ID, 뒤따라야, 성, 이메일, PHONENUMBER) 회사 (ID, 회사 명)

지금 내 문제는 내가 특정 회사에 ContactPerson를 연결해야한다는 것입니다,하지만 난을 가질 수 없습니다 같은 테이블에.

나는 한 쿼리에서 두 테이블을 모두 표시하기 위해 join 문을 사용할 수 있지만 asp.net 프로젝트에이 databse를 구현할 때 어떤 회사가 어떤 회사에 링크되어 있는지 알기 위해 데이터베이스가 필요하다는 것을 알고있다.

어떻게하면됩니까?

답변

1

에서 모든 사람을 선택합니다.

넣어 회사 ID라는 사용자 테이블의 열 ...

ALTER TABLE ContactPerson 
ADD CompanyID int 

(귀하의 ID를하는 int입니다 가정) 하고 다음 외래 키를 만듭니다

ALTER TABLE [dbo].ContactPerson 
    ADD CONSTRAINT [FK_ContactPerson_Company] 
    FOREIGN KEY (CompanyID) 
    REFERENCES Company (ID) 

상어가있는 경우 올바른 너는 많은 관계를 원한다.

이 회사의 모든 사람을 얻으려면 :

이 로부터 ContactPerson 을 * 을 선택 WHERE 회사 ID = X

당신은 외래 키 제약 조건을 적용해야하지만,하지 않습니다 당신이 돈이 ' 실수로 무효 한 데이터를 입력 할 수 있습니다. 모든 "제약"은 규칙에 따라 규칙을 적용합니다. 즉, "SQL이 어떤 회사에 속해 있는지"를 확인하는 것입니다.

위 쿼리는 외래 키 제약 조건없이 작동하지만 데이터베이스는 관계를 "알지 못합니다".

. 그리고 존재하지 않는 회사 ID가있는 사람을 삽입하면 SQL에서 오류가 발생합니다 (좋은 소식입니다).

+0

예 모든 사용자는 한 회사에 연결되어야합니다. 그러나 모든 회사는 여러 사람을 연결할 수 있습니다. 키는 어떻게 작동합니까? 나는 결코 열쇠로 일한 적이 없다. – Joel

+0

외래 키는 sql에 한 테이블의 열을 다른 테이블의 열로 연결하는 방법입니다. 외래 키는 당신의 임무가 무엇인지 알 것입니다. – Gats

+0

좋습니다, 감사합니다. – Joel

0

일대 다 관계이므로 일반적으로 해당 데이터를 ContactPerson 테이블에 넣습니다. 그러나 명시 적으로 말 때문에 당신은 그럼 그냥 조인 테이블을 만들 수 없습니다 :

create table ContactPersonCompany 
(
    ContactPersonID int not null foreign key references ContactPerson(ID), 
    CompanyID int not null foreign key references Company(ID) 
) 

지금 당신이 ContactPersonCompany 사이의 관계를 가지고있다.

예 : 나는 당신이 사람 당 한 회사가 있으리라 믿고있어, 그래서 당신은 "특정"회사에 말을했던 특정 회사

select 
    cp.Surname, 
    cp.Forename 
from ContactPerson cp 
inner join ContactPersonCompany cpc 
on cp.ID = cpc.ContactPersonID 
inner join Company c 
on cpc.CompanyID = c.ID 
where c.CompanyName = 'Some Company' 
관련 문제