Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wspólna tablica łącząca
orson
post
Post #1





Grupa: Zarejestrowani
Postów: 548
Pomógł: 2
Dołączył: 19.07.2003

Ostrzeżenie: (0%)
-----


Witam ...

eksperymentując i rozmyślając nad założeniami bazy wpadłem na pewien pomysł ... elementy łączy się ze sobą przy pomocy tablic które zawierają relacje 1:1, n:m i 1:n ... takie coś jest wygodne, w miarę wydajne i nie powoduje dublowania się danych (wszystko w teorii oczywiście :roll2: )

a gdyby tak połączyć tabele łączące w jedną ... już wyjaśniam o co chodzi ...

mamy kilka standardowych tabel: users, groups, content, params ... oraz jedną tabelę o nazwie con ... składa się ona z kolumny: type, relation, id1, id2 oraz priority ... i teraz przy pomocy różnych kombinacji type oraz relation łączymy ze sobą elementy id1 i id2 ... np: (po kolei: type, relation, id1, id2 - priority jest narazie nie ważne)
doc author 1 2 - dokument o id = 1 którego auterm jest user o id = 2
doc author 1 5 - dokument o id = 1 którego auterm jest user o id = 5
doc related_doc 1 3 - dokument o id = 1 który jest powiązany z dokumentem o id = 3
doc attachment 1 88 - plik o id = 88 jest załącznikiem do dokumentu o id = 1
doc related_news 1 66 - news 66 związany z dokumentem o id = 1
doc cat 1 4 - dokument 1 w kategorii 4
doc cat 1 9 - dokument 1 w kategorii 9

w ten sposób można pobierać dane na temat elementów przy pomocy jednego zapytania ... wszystkie informacje o dokumencie są dostępne odrazu ... potem stosując proste zapytania (brak joinów za każdym razem z tabelą pośrednią ... ) również bardziej skąplikowane elementy (np. ten użytkownik napisał też: i dokumenty napisane przez usera - wszystkie tytuły pobrane jednym zapytaniem, bo id przecież mamy), wszystkie komentarze do dokumentu itp ...

co do priority: jego zastosowanie jest oczywiste i chyba nie wymaga wyjasnień ...

i teraz pytanie co o tym sądzicie - celowo nie podaje żadnych create table bo taka koncepcja może zostać wykorzystana w każdym silniku danych.

pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
orson
post
Post #2





Grupa: Zarejestrowani
Postów: 548
Pomógł: 2
Dołączył: 19.07.2003

Ostrzeżenie: (0%)
-----


witam ...

i temu i temu ... wiadomo przecież że jak w zapytaniu nie ma joinów to wykonuje się ono szybciej ... do tego jeszcze wybór po znanych id (które mają klucze)

co do mnożenia bytów ... to przecież dokument ma autora, kilka dokumentów powiązanych, jeden-dwa załączniki, znajduje się w jednej-dwóch kategoriach i tyle ... to przecież odpowiada rekordom z tabel con_UserDoc, con_DocCat, con_DocDoc itp ... bardzo upraszcza to projekt bazy ...
ze wstępnych pomiarów na zbliżonych systemach (prosty cms z łączeniami w osobnych tablicach vs. ten sam cms przerobiony na jedną wspólną + zapytania o konkretne elementy) przyrost wydajności jest od 10 do 40% (IMG:http://forum.php.pl/style_emoticons/default/Rkingsmiley.png) w zależności od wyświetlonej strony (nie liczyłem poszczególnych zapytań) ...
pomiar ab 1000 zapytań ...

pozdrawiam
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 26.12.2025 - 03:21