/ / ID łączenia z jednej tabeli do danych w innej tabeli - sql-server

Łączenie identyfikatora z jednej tabeli do danych w innej tabeli - serwer sql

Mam zadanie, w którym mam utworzyć dwie tabele w bazie danych. Tabele wyglądają tak;

Osoba kontaktowa (identyfikator, imię, nazwisko, e-mail, numer telefonu)
Firma (identyfikator, nazwa firmy)

Teraz mój problem polega na tym, że muszę powiązać osobę kontaktową z określoną firmą, ale nie mogę jej mieć w tej samej tabeli.

Rozumiem, że mogę użyć instrukcji join doPokaż obie tabele w jednym zapytaniu, ale potrzebuję bazy danych, aby wiedzieć, która osoba jest połączona z którą firmą, gdy wdrażam tę bazę danych w moim projekcie asp.net.

Jak mam to zrobic?

Odpowiedzi:

1 dla odpowiedzi № 1

Powiedziałeś „konkretna” firma, więc zakładam, że masz jedną firmę na osobę.

Umieść kolumnę w tabeli użytkowników o nazwie CompanyID ...

ALTER TABLE ContactPerson
ADD CompanyID int

(zakładając, że Twoje identyfikatory to int) a następnie utwórz następujący klucz obcy:

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

Rekin ma rację, jeśli chcesz mieć wiele do wielu relacji.

Aby zebrać wszystkie osoby w firmie:

WYBIERZ * Z Osoba kontaktowa GDZIE CompanyID = x

NIE MUSISZ stosować klucza obcegoograniczenie, ale jeśli tego nie zrobisz, możesz przypadkowo wprowadzić nieprawidłowe dane. Wszystko, co robi „Ograniczenie”, to narzucenie reguły, innymi słowy „upewnienie się, że sql wie, którzy ludzie są w jakiej firmie”, jak sugeruje twoje pytanie musieć zrobić.

Powyższe zapytanie działałoby bez ograniczenia klucza obcego, ale wtedy Twoja baza danych nie „wie” o relacji.

..i jeśli spróbuję wstawić osobę z identyfikatorem firmy, który nie istnieje, SQL wyświetli błąd (to dobrze).


0 dla odpowiedzi nr 2

Ponieważ jest to relacja jeden do wielu, zwykle umieszczam te dane w pliku ContactPerson stół. Ale ponieważ wyraźnie mówisz, że nie możesz, po prostu utwórz tabelę łączenia:

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

Teraz masz związek między ContactPerson i Company.

Przykład: wybierz wszystkie osoby z określonej firmy

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"