1 klucz obcy dla 2 tabel?

0

Robię projekt małej bazy danych i mam problem z z połączeniem tabel. Mam 2 tabele. Klientów i pracowników. W obu tych tabelach znajdują się kolumny z kodem pocztowym i miastem, ale te dane chciałbym trzymać w 2 innych tabelach. Czy jest opcja aby połączyć np. kod pocztowy do tabeli pracownicy i klienci jednocześnie?

0

W jakim sensie "połączyć"? RozumiemTwoj przypadek tak, że chcesz mieć tabelę z miastami i kodami pocztowymi do nich przypisanymi, by nie musieć kopiować tych danych dla każdego klienta. W dużych systemach raczej nikt się w to nie bawi, ale skoro chcesz i na dodatek chcesz to zabezpieczyć FK, to klucz obcy zakładasz nie tyle w tabeli z miastami, co w tabelach z klientami i pracownikami. W każdej z tych tabel osobny klucz obcy

1

Czy jest opcja aby połączyć np. kod pocztowy do tabeli pracownicy i klienci jednocześnie?

Tak. Najlepiej zrobić dodatkową tabelę, która będzie reprezentowała: id, kod pocztowy, Miejscowość. Potem robisz kolejną tabelę, która będzie trzymała id tej tabeli i id (pracownika lub klienta), typ osoby (klient, pracownik).

0

@Kabom: Pamiętaj, że napisałem "RACZEJ nikt". Jeśli pracujesz na bazie, w której trzymasz kilkaset tabel, to normalizowanie każdej możliwej encji schodzi na dalszy plan, a istotniejsza staje się wygoda i sprawność pobierania / aktualizacji danych. Zaraz pewnie skrzyknie się na mnie jeden z drugim, że po co duplikować dane, ale zwyczajnie wygodniej jest wrzucić kod pocztowy i miejscowość do pół tekstowych w tabeli z kontrahentami, niż obsługiwać edycję adresu kontrahenta i budować słownik w osobnej tabeli (dla użytkownika najczęściej też jest to wygodniejsze).
Może w przypadku giganta pokroju Allegro (gdzie tych adresów jest naprawdę ogrom), przyniosłoby to oczekiwane rezultaty, ale przy "zwykłych" projektach czasem warto sobie odpuścić takie normalizacje.
Swoją drogą, dziś duży hype na bazy nierelacyjne jest, a one aż się proszą o duplikowanie danych zamiast tworzenia powiązań między encjami.

1

Poczytaj sobie o formach normalnych w SQL: https://pl.wikipedia.org/wiki/Posta%C4%87_normalna_(bazy_danych)
To Ci trochę rozjaśni, a potem poczytaj jeszcze dlaczego czasami robi się denormalizację.

0

Koledzy nieco źle mówią, jeśli chciałbyś to dobrze zrobić to musisz zrobić tabele słownikową miast, tabele słownikową kodów pocztowych, pivota ktory łączy miasto i kod bo np w każdym mieście masz kiknanaście kodów wiec nie trzyasz nazwy miasta tylko id. Bo tutaj wyzej wszyscy założyli ze jest jeden kod pocztowy do miasta.

Nagłówek 1 Nagłówek 2
id_tabela_miasta id_tabela_kod_pocztowy

Zalezy tez czy to ma wpisywac uzytkownikm czy operator systemu itd. nie zasze warto sie az tak bawic

1 użytkowników online, w tym zalogowanych: 0, gości: 1