Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Relacja sama do siebie
Forum PHP.pl > Forum > Bazy danych
Kuziu
Cześć,

mam taki problem:

Tworzę coś w stylu edytora kodu z czego każdy kod może się składać z innych kodów. A więc każdy może zawierać w sobie inny kod i tak bez końca. Wydaje mi się logiczne użycie tutaj relacji w tabeli samej do siebie. A więc jakiś element w tabeli wskazuje na inny element w tej samej tabeli i tak można zagnieżdżać obiekty bez końca, jednak gdzieś czytałem że to zła praktyka, no i też ilość zapytań strasznie mi się namnoży gdyż jeśli zagnieżdżę kilka kodów w sobie, to żeby pobrać zawartość jednego z nich będę wykonywał kilka/kilkanaście zapytań SELECT, dla kolejno znalezionych rekordów.

Czy da się to jakoś inaczej zrobić czy też rozwiązanie jakie planuję wdrożyć jest dobre?
Crozin
To mi wygląda na najzwyklejsze drzewko. A o strukturach drzew jest od groma wątków.
Kuziu
No właśnie nie do końca drzewko, bo w drzewku masz unikalny obiekt w każdej gałęzi, a tutaj 1 kod może znajdować się w wielu kodach.
Crozin
Nic nie stoi na przeszkodzie by zrobić z tego zwykłe drzewko. Po prostu strukturę drzewa przenieś do oddzielnego zasobu (tu: tabeli).
Kod
Kody: id | kod
Drzewko: id | id_kodu | kolumny dla struktury drzewa
Kuziu
Hmmm może nie do końca jasno to wytłumaczyłem...

Kod składa się z treści tekstowej, ale dodatkowo może również zawierać w sobie kilka innych kodów.

Więc jest jakby zarówno katalogiem i plikiem.

Mam teraz taką strukturę:

Kod
Kod: id | nazwaKodu
Kod_zrodlo: id | id_kodu | id_zrodlowegoKodu | treśćKodu


I teraz, jeśli id_zrodlowegoKodu = 0 to znaczy że jest to czysty kod tekstowy i pobieram treśćKodu

jeśli jest id_zrodlowegoKodu > 0 to muszę pobrać Kod i znów wszystkiego jego kody_zrodlowe, i tak to zapętlić rekurencyjnie, aż otrzymam same kody z czystym tekstem. Siedzę już nad tym pół dnia i chyba bez rekurencyjnych zapytań się nie da. Chciałem zrobić tez tak jak podałeś z drzewkiem, ale wtedy każdy zapis musiałby iść w kilka miejsc, bo jesli ten sam plik by był w wielu katalogach to jego zmiana pozycji czy skasowanie musiało by wpłyną na kod w wielu katalogach. Więc albo wiele zapytań przy zapisie lub przy odczycie. No chyba że macie na to jakoś sposób.
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.