Problemem jest tutaj podpisywanie . Istnieją trzy podstawowe podejścia do radzenia sobie z podtypami.
- Umieść każdy typ rekordu w całkowicie oddzielnej tabeli;
- Umieść rekord w tabeli nadrzędnej, a następnie rekord w tabeli podtypów; i
- Umieść wszystkie rekordy w jednej tabeli, zawierającej kolumny dopuszczające wartość null dla „opcjonalnych” danych (tj. rzeczy, które nie mają zastosowania do tego typu).
Każda strategia ma swoje zalety.
Na przykład (3) ma szczególne zastosowanie, jeśli nie ma różnicy między różnymi podtypami. Czy w Twoim przypadku różne rekordy dziennika mają dodatkowe kolumny, jeśli są określonego typu? Jeśli tego nie robią lub jest kilka przypadków, w których umieszczają je wszystkie w jednym stole, ma sens.
(2) jest powszechnie używany w przypadku stołu Party. Jest to powszechny model w CRM, który obejmuje nadrzędny obiekt Party, który ma podtypy dla osoby i organizacji (Organizacja może również mieć podtypy, takie jak Firma, Powiązanie itp.). Osoba i organizacja mają różne właściwości (np. zwrot grzecznościowy, imiona, data urodzenia itp. dla osoby), więc warto je podzielić, zamiast używać kolumn dopuszczających wartość null.
(2) jest potencjalnie bardziej wydajny (chociaż obciążenie kolumn NULL w nowoczesnych DBMS jest bardzo niskie). Większym problemem jest to, że (2) może być bardziej mylące dla programistów. Dostaniesz sytuację, w której ktoś będzie musiał gdzieś przechować dodatkowe pole i uderzy je w kolumnę, która jest pusta dla tego typu po prostu dlatego, że jest to łatwiejsze niż uzyskanie zgody na dodanie kolumny przez administratorów baz danych (nie, nie żartuję ).
(1) jest prawdopodobnie najrzadziej używanym schematem z 3 z mojego doświadczenia.
Wreszcie należy wziąć pod uwagę skalowalność i jest to prawdopodobnie najlepszy przypadek (1). W niektórych punktach JOIN nie skalują się efektywnie i będziesz musiał użyć pewnego rodzaju schematu partycjonowania, aby zmniejszyć rozmiary tabel. (1) to jedna z metod (ale metoda prymitywna).
Nie martwiłbym się tym jednak zbytnio. Zazwyczaj będziesz musiał dotrzeć do setek milionów lub miliardów rekordów, zanim stanie się to problemem (chyba że Twoje rekordy są naprawdę duże, w takim przypadku nastąpi to wcześniej).