Dwie podobne tabele ze wieloma wspólnymi kolumnami

0

Powiedzmy, że mamy takie tabele, Gazeta i Podręcznik

Gazeta :

  • id
  • nazwa
  • opis
  • isbn
  • formatId - fk
  • opakowanieId - fk
  • dodatekId - fk
  • dataUtworzenia
  • rodzajPapieruId - fk
    .... i inne kolumny

Podręcznik:

  • id
  • nazwa
  • opis
  • isbn
  • drukarniaId- fk
  • kolorOkladkiId- fk
  • dataUtworzenia
  • rodzajPapieruId - fk
    .... i inne kolumny

Ogólnie, chcę tutaj podkreślić, że istnieje wiele kolumn wspólnych, ale też wiele które występują tylko w jednej z tych tabel.

Jak to znormalizować ? Czy to powinna być jedna tabela, czy dwie tabele ?
Jeśli byłaby jedna, to trzeba byłoby dodać jeszcze kolumnę taką jak TypId (gazeta lub podręcznik).

O normalizacji już trochę czytałem i wykonywałem ćwiczenia, ale nie potrafię rozgryźć tego przypadku.
Drugie pytanie, to jaką książkę lub kurs polecacie aby coś więcej dowiedzieć sie o normalizacji bazy danych ? Najlepiej z jakimiś bardziej zaawansowanymi przykładami no i napisana ludzkim językiem.

1

Nie wiem jak w innych DB ale w Postgresie można to rozwiązać dziedziczeniem.

1

@hauleth: nie gadaj mu o dziedziczeniu - nie ten poziom abstrakcji...
@pred: to zalezy ile masz tych różnych kolumn... jeśli niewiele, to możesz dorzucić do tej samej tabeli i dla jednego typu (bo to pole musisz dodać) będzie ono puste. Jeśli jest ich sporo, to możesz dać dla tychże osobną tabelę

1

Czy to powinna być jedna tabela, czy dwie tabele ?

Ja bym zrobił 3 tabele: wydawnictwo, gazeta, podręcznik. W wydawnictwo dałbym kolumny wspólne i zapewnił łączenie tych tabel. Każda gazeta/podręcznik powinna mieć swój rekord 1:1 w tabeli wydawnictwo. Inaczej mówiąc logiczny rekord gazeta/podręcznik składa się z dwóch fizycznych rekordów. Zawsze wydawnictwo plus albo gazeta albo podręcznik.

Przy mapowaniu na obiekty aplikacyjne (ORM) jest to metoda table per class, jeśli się nie mylę.

1

Kot i Pies tez maja szereg atrybutów wspólnych, podobnie jak Rower i Wrotki. To nie powód by wrzucać wszystko do jednego worka.

Nie napisałeś nt. tego co robisz z danymi.. albo inaczej, czym się różni logika operująca na gazecie od tej operujacej na podręczniku?

0

Dzięki za dotychczasowe odpowiedzi.

To jest różnica 5-10 kolumn (cała tabela to około 30 kolumn), nie policzyłem jeszcze dokładnie - ale istnieje bardzo duże prawdopodobieństwo, że oba obiekty będą się zmieniały w domenie niezależnie.

@Mistrzowski Ogórek - zdecydowana większość to wspólna logika biznesowa, chociaż tak jak wspomniałem, może się rozjeżdżać.

0

a ja zrobiłbym jedną tabelę, która by miała wszystkie pola z obu tabel, czyli pola tylko z tabeli A, pola tylko z tabeli B i wszystki wspólne pola, Do tego wporwdziłbym dodatkowe pole w którym oznaczałbym tym produktu. Nie ma sensu mnożyć tabel

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