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
dr_bonzo
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Kolejnym ograniczeniem jest to ze klucze musza byc identycznym typem dla kazdej tabeli.



Przyklad zapytania: znajdz mi autorow dokumentu o ID = 1
* JOINY
  1. SELECT autors.name, autors.id
  2. FROM autors
  3. LEFT JOIN documents_authors ON documents_authors.author_id = authors.id WHERE documents_authors.document_id = 1


* twoim rozwiazaniem
  1. SELECT id2
  2. FROM relacje
  3. WHERE type = 'doc' AND relation = 'author' AND id1 = 1

dostane ID autorow, zeby pobrac ich dane musze wykonac JOINA lub kolejne zapytania
(moze cos przeoczylem, zle zrozumialem?)
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: 25.12.2025 - 22:23