Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> db layer, jak pisac?
dr_bonzo
post
Post #1





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

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


Stoje przed zadaniem napisania abstrakcji na bazy danych i mam dwa rozwiazania do wyboru:

1. zupelna abstrakcja od api az po pseudo skladnie sql, ktora ma byc identyczna dla kazdej z baz (lub zamiast skladni, budowanie zapytania, np.
$q = $db->newQuyery( 'select' );
$q->addFields( array( 'ID', 'blabla' ) );
$q->addTable(...
$q->limited( 3,5 );
subqueries
triggers
transactions
itd...
masa roboty, ale za to mam calkowita niezaleznosc od bazy, nie moge wykorzystac wszystkich mozliwosci bazy (np. triggery w psql -- w mysqlu chyba nie ma?)

[aplikacja]<->[db layer]<-**[DB]

lub

2. tworze tylko wspolne api -- sql bedzie recznie wpisywany i bedzie rozny dla roznych baz + tworze kolejna abstrakcje (dla kazdej z baz) zawierajaca podstawowe zapytanie uzywane przez aplikacje, np. pobierz dane usera, pobierz wszystkie newsy

[aplikacja]<->[podstawowe operacje]<-**[db layer (bardziej API)]<->[DB]

co jest latwiejsze (chyba) do napisania ale nie mam calkowitej niezaleznosci od bazy i przenoszenie na inna baze wymaga napisania nowych "podstawowych funkcji".

Jak wy to rozwiazaliscie, ktore z rozwiazan sie sprawdza? A moze macie inne pomysly?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
radziel
post
Post #2





Grupa: Zarejestrowani
Postów: 103
Pomógł: 0
Dołączył: 25.04.2003
Skąd: Olsztyn

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


Hm, a ja mam do Was pytanie. Chcąc pisać skrypty, w miarę niezależne od typów baz, jednocześnie nie komplikując ich kodu, jak byście rowiązali problem dot. zwracania przez dany model, tych samych danych, ale przy różnych (w treści) zapytaniach.
Czy wyralibyście:

A) tworzymy globalną tablicę typu:
  1. <?
  2. $arrQueries['mysql']['select user'] = 'SELECT * FROM...';
  3. $arrQueries['pgsql']['select user'] = 'SELECT * FROM...';
  4. $arrQueries['sqlite']['select user'] = 'SELECT * FROM...';
  5. ?>

Potem, odwołując się odpowiednio do tej tablicy:
  1. <? $resResult = $db->query($arrQueries[DB_TYPE]['select user']);?>


B) Tworzymy oddzielne modele i sterownik bazy dla każdej z baz.
C) Tworzymy jeden model, ale w każdej metodzie występuje switch.
  1. <?
  2. switch(DB_TYPE)
  3. {
  4. case 'mysql': $q='SELECT * FROM...'; break;
  5. case 'pgsql': $q='SELECT * FROM...'; break;
  6. case 'sqlite': $q='SELECT * FROM...'; break;
  7. }
  8. $resResult = $db->query($q);
  9. ?>

D) Przygotowujemy oddzielne skrypty. z odpowiednią obsługą - najprostrze,ale najbardziej czasochłonne przy modyfikacjach.

Szczerze mówiąc, wybrał bym wariant B. Co o tym myślicie?
Go to the top of the page
+Quote Post

Posty w temacie
- dr_bonzo   db layer   23.04.2005, 11:49:55
- - rzseattle   Problem ktory poruszyles jest dosc zlozony. Mozna ...   23.04.2005, 13:51:42
- - M4chu   A może Propel?   23.04.2005, 15:19:50
- - Nievinny   Ja myślę, że wystarczy API, na tyle spójne aby obs...   23.04.2005, 16:07:40
- - hawk   @dr_bonzo: A po co ty to w ogóle piszesz? Pisanie ...   24.04.2005, 11:16:08
- - Nievinny   @hawk -> dlatego aby współnym AIP obsłużyć MySQ...   24.04.2005, 16:47:42
- - hawk   @Nievinny: powtarzam, jaki jest sens tworzyć wspól...   25.04.2005, 12:01:52
- - dr_bonzo   @hawk: najpierw mial to byc prosty layerek, ale wz...   25.04.2005, 12:25:49
- - Nievinny   @hawk -> OK, ale czemu nie stworzyć własnego z ...   25.04.2005, 15:15:19
- - hawk   @Nievinny: a czemu nie stworzysz od podstaw własne...   26.04.2005, 11:37:45
- - Nievinny   @hawk -> Czyli twoim zdaniem należy wykorzystać...   26.04.2005, 12:06:28
- - dr_bonzo   Przesiasc sie na 5ke.   26.04.2005, 12:45:00
- - Nievinny   @dr_bonzo -> ja działam na PHP5, ale nie każdy ...   26.04.2005, 13:12:54
- - dr_bonzo   A czytales cokolwiek o PDO? Mozesz z nim zrobic to...   26.04.2005, 13:33:11
- - SongoQ   @dr_bonzo Co do pierwszego rozwiazania to troche b...   26.04.2005, 13:41:59
- - Nievinny   @dr_bonzo -> czytałem i chodzi mi oto, że jakiś...   26.04.2005, 14:06:13
- - hawk   @Nievinny: jak admin serwera nie udostępni rozszer...   26.04.2005, 14:28:04
- - Nievinny   @hawk -> działam na 4 tylko kiedy zlecą mi wyko...   26.04.2005, 18:30:41
- - radziel   Hm, a ja mam do Was pytanie. Chcąc pisać skrypty, ...   4.05.2005, 18:09:00
- - M4chu   e) Kozystamy z gotowego rozwiazania: ezsql, adodb,...   5.05.2005, 15:25:25
- - radziel   Cytat(M4chu @ 2005-05-05 16:25:25)[...] wiec ...   5.05.2005, 17:03:06
- - Vengeance   Dlatego wg. mnie abstrakcja bazy danych powinna za...   5.05.2005, 17:53:01


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: 6.10.2025 - 01:28