Relacje pomiędzy bazami danych - jaka poprawna ?

0

Witam

Robie projekt na bazy danych. Mam doprowadzić wszystko do 3 postaci normalnej.

Posiadam obecnie kilka tabel, z trzema mam takie problemy że:

  1. Tabela Participants powinna mieć możliwość odwołania się do tabeli PlayerDetails, lecz PlayerDetails nie powinna nic wiedzieć na temat Participants. Po prostu nie ma takiej potrzeby. Jak to dokładnie zaznaczyć na diagramie ?
  2. Participants powinno odwoływać się jakoś do ConflictSide, z tym że ConflictSides tabela ma klucz kompozytowy. Takie same pytanie, jak to dokładnie oznaczyć? Może po prostu napisać nazwę tabeli w NavigationProperties ?

Krótkie wyjaśnienie na temat tabel:
Events - wydarzenia - Zapisani użytkownicy spotykają się w wyznaczonym miejscu, określonym przez organizatora wydarzenia.
Participants - jest to lista zapisanych użytkowników na wydarzenie. Każdy podczas zapisu wybiera stronę konfliktu oraz inne rzeczy jak broń (z listy) którą wcześniej podał w profilu
PlayerDetails - są to informacje na temat użytkownika - podaje on tam swoj ksywkę, team do którego należy, Kamuflaż oraz inne rzeczy.

Tutaj screen. https://zapodaj.net/4d232022d1d31.bmp.html

Oczywiście w bazie danych będą też inne błędy. Jeśli ktoś jakieś wychwyci to proszę o info.

Pozdrawiam

0

Ja widzę wiele błędów:

  1. Brak konsekwencji w nazwie klucza głównego tabeli - raz jest Id, w tabeli Maps mamy MapId.
  2. Tabela ConflictSides z diagramu wynika, że mamy taką sytuację - tam klucz główny jest złożony z dwóch atrybutów w tym jeden to varchar ?
    "Terroryści", 2 (numer eventu);
    "Prawilni",2
    "Terroryści",3
    "Prawilni,3
    Rozumiesz mogą być te same nazwy konfliktu
  3. W Partipicants mamy UserId, ale nie ma połączenia z AspNetUsers ? Czy UserId powinno być połączone z PlayerDetails ?
  4. Na tym diagramie mamy związek wiele do wielu między rolami, a użytkownikami. Mam nadzieję, że wiesz iż pomiędzy nimi powinna być tabela łącząca.

To tak na pierwszy rzut oka... w mojej opinii ogólnie cała struktura jest mało czytelna. Musiałem się chwilę zastanowić co jest co. Z reguły ja projektuje bazy danych w taki sposób by kilka miesięcy później wiedzieć szybko o co chodzi.

0
  1. poprawiłem
  2. Oczywiście zdaję sobie z tego sprawę, lecz w każdym wydarzeniu nie może być dwóch takich samych nazw konfliktu. Nazwa konfliktu w połączeniu z numerem wydarzenia daje unikatowy klucz główny (kompozytowy)
  3. Podobna sytuacja jak w 2. Tutaj zastanawiam się jak to połączyć do PlayerDetails. Może być relacja tylko w jedną stronę ? Jeśli tak to jak to zaznaczyć ? Dokładniej: Jeśli będę wyciągał dane z tabeli Participants to chce pobrać też niektóre kolumny z tabeli PlayerDetails. Ale np przy pobieraniu PlayerDetails nigdy nie zajdzie potrzeba wyciągania informacji z Participants.
  4. Tak, dodam ją po namyśle czy to w ogóle jest mi potrzebne w tym projekcie.

Co do Twojego ostatniego zdania Mariano. Też tak staram sie robić, na razie wychodzi jak wychodzi.

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