Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dobra praktyka a laczenie jednej tabeli z wieloma
Forum PHP.pl > Forum > Bazy danych
Luciano
Witam,

Zaprojektowalem pewna strukture niestety moja wiedza nt. baz danych nie jest na tyle duza abym mogl jednoznacznie okreslic czy takie rozwiazanie jest dopuszczalne.

Chcialbym aby wiekszosc obiektow w systemie bylo "zasobem". Kazdy obiekt mial by unikalny numer ID. Powiedzmy, ze mam dwa rodzaje obiektow: grafike oraz muzyke. Obydwa obiekty sa odzwierciedlone w bazie danych tabelami o tych samych nazwach. Problem polega na tym ze ID zasobu musi byc unikalne. Nie moze sie trafic grafika z tym samym id zasobu co muzyka.
Mam wiec tabele "zasoby", ktora musi laczyc sie z tabelami grafika i muzyka w relacji 1-1.

Jedyne rozwiazanie tego problemu, ktore przechodzi mi do glowy to stworzy taka tabele:

ZASOBY
----------
ID
RODZAJ
LINK


Kolumna rodzaj przyjmowala by wartosci 1 - dla muzyki i 2 - dla grafiki a kolumna link zawierala ID obiektu z ktorym jest polaczona. Takie rozwiazanie z pewnoscia dziala. Nie jestem jednak pewnien czy nie gwalci to wszystkich zasad dobrej praktyki bazo danowej biggrin.gif Kolumna rodzaj definiuje do jakiej tabeli koresponduje kolumna LINK przez co (moge sie mylic) nie moge stworzyc np. kluczy obcych.

Pytanie do Was drodzy eksperci czy takie rozwiazanie jest dopuszczalne czy powinno byc stanowczo zabronione? Jedyne co przychodzi mi jeszcze dlo glowy to usunac rodzaj oraz link i dla kadego typu obiektow tworzyc nowe tabele laczace ale w przypadku wielu typow obiektow mial bym mnustwo tych tabel.
Zyx
Jak najbardziej jest dopuszczalne. Klucze obce też jak najbardziej stworzysz. W tabelach dla poszczególnych typów po prostu zrób pole id o identycznej wartości, jak ID wiersza w zasoby, z którym są one powiązane. Dostajesz wtedy identyfikującą relację 1-1, a że takich tabel jest więcej, to cóż... baza danych to nie tylko formalna struktura, ale i semantyka, którą my sami definiujemy. Jej część można zapisać bezpośrednio w strukturze i powiedzieć: "tego mi pilnuj", ale w żadnym wypadku nie jest tak, że jak czegoś się nie da wyrazić, to jest to zabronione i nawiedzi Cię agent MySQL-a ze spluwą oraz hiszpańską ikwizycją, po czym Cię nafaszerują ołowiem.

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.