Brakujące ogniwo w relacjach - jak zamodelować efektywnie?

0

Witam.
Mam problem z zamodelowaniem relacyjnej bazy danych. Powiedzmy, że mamy tabele:
Countries
Cities
Producers.

Producers mają pole city_id wskazujące na id miasta, w którym są umiejscowieni
Cities mają pole country_id wskazujące na id kraju, w którym leżą.

Jeśli chcemy się dowiedzieć w którym kraju leży producent abcd, to pobieramy z niego city_id, pobieramy miasto o takim id, z niego natomiast pobieramy country_id, pobieramy kraj o takim id. Myślę, że jest to tak intuicyjne podejście, że więcej nie trzeba tłumaczyć.

Natomiast co zrobić z sytuacją, gdy mam producentów nieprzypisanych do miasta (ponieważ np. nie jest w tej chwili znane), ale wiadomo w jakim kraju się znajduje?
Pierwsza myśl, to dodanie X miast o nazwie '???', gdzie X to ilość krajów i przypisywanie takich producentów tym właśnie 'miastom'. Rodzi to problemy w utrzymaniu spójności bazy danych.
Drugi pomysł to dodanie do tabeli Producers również 'country_id'. Tutaj też trzeba zapewnić spójność, a raczej walidację przy dodawaniu i edycji rekordów.

Bardzo proszę o opinie.
Nie jestem bazodanowcem, więc nie wiem czy istnieją standardowe rozwiązania tego typu problemów, jakie niosą ze sobą konsekwencje w implementacji, rozszerzaniu i utrzymaniu. Z góry dzięki za wszelką pomoc.

0

A czy nie korzystniej by było gdyby Producers zawierało po prostu pole country i pole city ?
Inna sprawa czy jest sensowne żeby miasta były w osobnej tabeli? Moim zdaniem to w tym wypadku powinien być zwykły ciąg znaków wpisywany do każdego rekordu.

0
W2K napisał(a):

A czy nie korzystniej by było gdyby Producers zawierało po prostu pole country i pole city ?

Wydaje mi się, że napisałem o tym powyżej, opcja 2.

W2K napisał(a):

Inna sprawa czy jest sensowne żeby miasta były w osobnej tabeli? Moim zdaniem to w tym wypadku powinien być zwykły ciąg znaków wpisywany do każdego rekordu.

Tak. Chciałbym również indeksować po miastach jak i je wyszukiwać.

0
W2K napisał(a):

Inna sprawa czy jest sensowne żeby miasta były w osobnej tabeli? Moim zdaniem to w tym wypadku powinien być zwykły ciąg znaków wpisywany do każdego rekordu.

Tak, no chyba, że zamiast 3NF chcemy walczyć z dziesiątkami wersji pisowni nazwy tego samego miasta.

rafal__ napisał(a):
W2K napisał(a):

A czy nie korzystniej by było gdyby Producers zawierało po prostu pole country i pole city ?

Wydaje mi się, że napisałem o tym powyżej, opcja 2.

Jakby nie patrzeć jest to sensowniejsze niż tworzenie jakichś fejkowych rekordów dla miast.

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