Jestem całkiem nowy w projektowaniu baz danych, ale rozumiem podstawy. Tworzę relacyjną bazę danych i chciałbym zrobić coś podobnego do tworzenia typu lub klasy wielokrotnego użytku. Na przykład załóżmy, że mam tabelę Customer
i tabelę . Klient i produkt są powiązane standardową relacją 1-do-wielu, więc pozycja ma kolumnę o nazwie CustomerId
.Jak modelować niestandardowy typ w relacyjnej bazie danych?
Chciałbym również mieć wiele "notatek" dla każdego klienta: i dla każdej pozycji. W normalnym modelu OOP po prostu utworzyłem klasę Note
i tworzyłem jej instancje, kiedy tylko było to potrzebne. Oczywiście relacyjna baza danych jest inna. Zastanawiałem się nad tabelą Note
i chciałbym uzyskać relację jeden do wielu między Klientem a Notatką, a także Przedmiot i Uwaga. Problem polega na tym, że tabela uwag będzie musiała mieć kolumnę dla każdej innej tabeli, która chce użyć tego "typu". (zobacz przykład poniżej)
Pomyślałem także, że zamiast tego mogę utworzyć stół pośredni między Notatką a Klientem/Przedmiotem (lub innymi). Pozwoli mi to uniknąć dodawania dodatkowych kolumn w Note dla każdej tabeli, która się do niej odwołuje, więc notatka może pozostać niezmieniona, ponieważ dodaję więcej tabel wymagających notatek. Myślę, że to jest lepsze rozwiązanie. (patrz przykład)
Jak zazwyczaj radzi sobie z taką sytuacją? Czy jestem blisko, aby poprawić? Byłbym wdzięczny za wszelkie porady dotyczące projektowania mojej bazy danych w taki sposób, jaki opisałem powyżej.
Pytanie: Czy kiedykolwiek uwaga stosuje się do wielu podmiotów; to jest może ta sama uwaga dotyczy zarówno klienta, jak i przedmiotu? Czy ta sama uwaga może dotyczyć wielu klientów lub wielu przedmiotów? –
Nie, każda notatka byłaby tylko dla jednego klienta, przedmiotu lub cokolwiek innego. –
Nic w projekcie bazy danych nie wyklucza tego. Powinieneś przenieść pola TEKST i DATA z UWAGA do CustomerNote i ItemNote, aby odpowiednio odwzorować, że każda uwaga może być powiązana z najwyżej jednym Klientem lub Przedmiotem. W rezultacie tabela NOTE zostanie całkowicie wyeliminowana. –