Dostęp do bazy danych

Witam. Moje pytanie dotyczy baz danych MySQL oraz pracy z nimi za pomocą PHP.

Widziałem różne, mniej i bardziej skomplikowane metody dostępu do bazy danych, oraz do pobierania oraz aktualizowania w nich danych.

Chciałbym się spytać tych, którzy już mają w tym duży staż i doświadczenie, jaką metodę wy stosujecie do dostępu do bazy danych?

Czy tworzycie po jednej klasie dla każdej tabeli bazy danych? Może używacie po jednej klasie dla poleceń SELECT, UPDATE, DELETE, INSERT?

Proszę, uzasadnijcie, dla czego właśnie wybraliście taki sposób jaki wybraliście.

EDIT Chodzi mi tu głównie o uniwersalny dostęp do bazy danych - oddzielenie warstwy dostępu do danych od warstwy reguł biznesu, nie mówiąc już tu o wrstwie prezentacji.

2 lata, 3 miesiące temu | edytowane przez: robert 12825

  • Są tacy co preferują ORM-y i chętnie stosują ActiveRecord, ja natomiast wybrałem DAO.

    ORM-y są dla mnie niepotrzebną nadbudową zmuszającą do uczenia się innej filozofii budowania zapytań gdy tymczasem na dłuższą metę i tak nie obędzie się bez znajomości SQL-a. Paradoksalnie dla prostych aplikacji ORM jest zbyt ciężki i skomplikowany, a dla rozbudowanych, wymagających efektywności aplikacji wprowadza zbyt wiele ograniczeń i praktycznie uniemożliwia optymalizację. Propel czy Doctrine mają już w tej chwili ogromne mnożliwości, ale i tak przy jakichkolwiek problemach programista jest zmuszony najpierw do skonstruowania zapytania SQL po to tylko aby potem próbować przetłumaczyć to na dialekt ORM-a.

    ActiveRecord z kolei nadaje się właściwie tylko do prostych operacji na pojedynczym rekordzie.

    DAO w moim wydaniu to po prostu najczęściej Klasa agregująca metody wykonujące zapytania SQL-owe dotyczące jakiejś logicznej części aplikacji np. newsów. Jeśli źródłem danych nie jest baza tylko np. SOAP to w DAO znajdą się metody pobierające dane via SOAP. Oczywiście w samej klasie DAO używam PDO a w praktyce jakiegoś "składacza zapytań" ułatwiającego konstruowanie zapytań SQL-owych (nie mylić z ORM-em). Tak dla jasności nie utożsamiam pojęcia modelu z relacją (tabelą) w bazie danych gdyż najprostsze operacji typu INSERT, UPDATE, DELETE najczęściej i tak wymagają działania na więcej niż jednej tabeli.

  • Trudno tu coś wyjaśniać, kiedy potrzebujesz użyć SELECT pole FROM tabela WHERE id=1; to używasz właśnie takiego prostego czegoś, ale kiedy potrzebujesz więcej danych, które są nagromadzone w innych tabelach to musisz użyć operatora JOIN (itp). Oczywiście wymaga to od Ciebie też odpowiedniego zaprojektowania schematu bazy, ale to już na dłuższy temat - jak to się robi ;-)

  • Może jakiś O/R Mapper? Np. Hibernate? Wtedy nie musisz pisać wielu zapytań.

  • Piszę aplikacje internetowe od jakiegoś czasu i doskonale w moich aplikacjach sprawdza się ADOdb (http://adodb.sourceforge.net/ - strona projektu). W połączaniu z Active Record możemy uzyskać dobre możliwości w bardzo szybkim czasie.

    Np. zapisanie nowego rekordu jest bardzo proste. $rekord = new rekord(); $rekord->kolumna1 = 'wartosc'; $rekord->kolumna2 = 'wartosc2'; $rekord->save(); // zapisuje w bazie

    to jest tylko krótki przykład możliwości AdoDB i Acrive Record - polecam oficjalną dokumentację dla AR (Active Record): http://phplens.com/lens/adodb/docs-active-record.htm

    Jeżeli chodzi o dużo większe aplikacje można spróbować Propela jednakże nauka tego narzędzia nie będzie już tak prosta i intuicyjna jak AdoDB, z którym osoba mająca podstawy z baz danych oraz PHP powinna sobie poradzić. Miłej nauki :)

Zaloguj się, aby dodać swoją odpowiedź