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 |
|
|
|
![]() |
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 |
|
|
|
orson Wspólna tablica łącząca 28.03.2006, 18:49:01
Aztech Wydaje mi się, że ta tabela mnożyłaby byty, mnóstw... 28.03.2006, 19:01:21
splatch Hm.. a jak to się ma do teorii normalizacji bazy d... 29.03.2006, 11:16:05
dr_bonzo Kolejnym ograniczeniem jest to ze klucze musza byc... 29.03.2006, 11:41:20
orson witam ...
wykonujesz kolejne zapytanie do tablicy... 29.03.2006, 21:28:58
splatch Co z kluczami obcymi? Dzięki nim możesz w bardzo w... 30.03.2006, 09:19:46 ![]() ![]() |
|
Aktualny czas: 26.12.2025 - 03:21 |