Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Relacyjna baza danych 'na plikach'
Forum PHP.pl > Forum > PHP > Pro > Archiwum Pro
splatch
Napisałem klasę (a właściwie dwie) do obsługi bazy danych. Ale jedno mi nie pasuje. Wszystkie funkcje są zawarte w klasie sbase. Następnie jest klasa druga - sbase_compiler (debilne nazwy winksmiley.jpg), która kontroluje typy wprowadzanych danych itp.
Mój problem polega na tym, że chciałbym rozbudować tą aplikacjęo obsługę relacji pomiędzy tebelami, a w obecnej sytuacji jest to niemożliwe. Zatem czy ktoś ma pomysł jak zorganizować klasy? Próbowałem skorzystać z dziedziczenia itp. ale nie jestem do końca przekonany do tego rozwiązania.
Obecnie po przebudowie mam klasy:
sbase - klasa do obsługi użytkownika
query - rozdzielanie zadań - dodawanie itp. (dziedziczy po sbase)
where - warunki, oraz like (dzedziczy po query)
limit oraz oreder - sortowanie itp.
Następnie:
select, insert, delete, update itp.
Czy taka stretegia nie jest zła? Czy ktoś może mi pomóc, w jaki sposób zorganizować wszystko, żeby działało i żebym ja sam się nie pogubił?

Z góry dzięki za pomoc.
itsme
jezeli chodzi o baze oparta na plikach polecam SQLite (chyba taka nazwa) wchodzi do PHP5 jest juz dostapna i jest to baza danych oparta na plikach
splatch
Zapomiałeś, że jeszcze nie każdy ma php5, a na pewno nie serwery, bo te zaczną używać php5 dopiero za jakiś czas. Do tego czasu strony bez baz mogłyby korzystać z powodzeniem z moich klas smile.gif. Ale skoro nikt nie chce mi pomóc, to będe musiał sobie radzić sam smile.gif.
borec
ale z tego co mi sie wydaje to wcale nie potrzebujesz php5, tylko ze ono ma lepsze wsparcie dla sqlite :wink:
raf2001
ja sobie sqlite zainstalowałem na krasnalku (chodz jeszcze zbytnio nietestowłem, to menadzer do sqlite działa) pozatym mozesz poprosić admina strony o rozpatrzenie "wzniosku" o zaionstalowanie biblioteki (1 plik + chyba 2 linijki do php.ini). A przydać się moża :wink:
ebe
A jak to jest z wydajnością baza przez SQLite vs baza przez MySql?
splatch
Nie rozumiecie mnie, ale nie dziwie sie, czasami sam siebie nie rozumiem smile.gif. Chodzi mi o napisanie skryptu dla ludzi, którzy mają konta np. na piwko.pl gdzie nie ma możliwości negocjacji warunków. Bo ja mam swoje konto i wystarczy, że napiszędo admina i mam co chcę. To by było dla ludzi, którzy mają strony na darmowych serwerach.
DeyV
Cytat
A jak to jest z wydajnością baza przez SQLite vs baza przez MySql?

Temat był już kiedyś omawian, ale prosta odpowiedź jest taka.
SQL lite służy jako xsminnik plików tekstowych, i w porównianiu z nimi jest znacznie szybszy i wygodniejszy.
NIE można go w żadnen sposób porównywać jednak z bazą danych typu MySQL lub PG, gdyż z wyjątkiem prostego odczytywania danych z jednej tableli (czyli praktycznie żadko spotykane pytania) jego wyniki są tragicznie gorsze.
squid
tak sie sklada ze sam tez probuje zlozyc cos na ksztalt bazy danych na plikach. Nie implementowalem jeszcze nic w php bo na razie jestem na etapie projektowania modelowania i symulacji struktury. Doszedlem do tego ze odpowiednikiem jednej tabeli np. w MySQL'u jest u mnie plik z danymi, plik z typem danych dla kazdej z kolumn jednego pliku i jesli chcem zrobic relacje to typ danych w pliku z typami danych oznaczam jakos jako relacje a w pliku z danymi w komorce gdzi normaleni bylyby dane okreslam cos w rodzaju adresu relacji czyli powiazanie kolumny w tym pliku i inna kolumna w tym lub innym pliku z danymi. Nie wiem czy o to chodzi ale tak przedstawia sie moja jeszcze abstrakcyjna wizja tego problemu
splatch
TAK! TAK!
Tak to widziałem smile.gif. Jeden plik z danymi, drugi z typami kolumn i wartościami domyślnymi i trzeci z wartością AUTO_INCREMENT. Myślę, że myśleliśmy o tym samym biggrin.gif. Jeśli chcesz to podeślę ci wyniki mojej pracy - tzn. starą klasę, bo nowe są wciąż w fazie tworzenie. Dodatkowo obecnie mój komp stoi w serwisie laugh.gif (nareszcie!).
splatch
Poprawiłem nieco klasy i obecnie wszystko działa (czytaj select i insert). Niestety brakuje funkcji update i delete. Nie działa też coś takiego jak limit, order lub where, po prostu totalna prozwizorka. Ale już niedługo powinna ta część działać, wystarczy ją przepisać z poprzedniej wersji.

Oto sposób używania klasy:
[php:1:ff061a70b2]<?php
include "sbase.class.php"; // wczytaj biblioteke
include 'pldate.php'; // wczytaj funkcje

$x = new sbase; // stworz obiekt
$x->connect('splatch','splatch','sbase'); // polacz

$query = $x->select( 'data,id', 'test' ); // pobierz dane

while( $row = $x->fetch_object( $query ) ) // wyswietl dane
{
echo 'Rekord <b>'. $row->id .'</b>, data <b>'. pldate( 'H:i l j F Y', $row->data ) .'</b><br>';
}
?>
[/php:1:ff061a70b2]
Moze kiedys będzie można używać innej konstrukcji jak w MySQL to znaczy tabela_1.kolumnax, tabela_2.kolumnay. Ale to musi poczekać. Czekam na wasze propozycje i uwagi na temat działania skryptu. Zapraszam również do obejrzenia kodu.

Download:
http://splatch.desk.pl/on/a/sbase.rar
Ozzy
Cytat
Do tego czasu


Ten czas się zbliża wielkimi krokami:)
splatch
Cytat
Cytat
Do tego czasu


Ten czas się zbliża wielkimi krokami:)


Wydaje mi się, że nie wszystkie serwisy od razu przejdą na php5, ponieważ aplikacje obiektowe wymagają wprowadzenia wielu zmian związanych z nową wersją. Wydaje mi się, że po publikacji nowego php jeszcze rok, może więcej będą działać serwisy oparte o poprzednią wersję. Oczywiście będzie boom bo każdy host napisze 'Tylko u nas! Najnowsza wersja php!'.

Ale to moje subiektywne odczucia smile.gif. Nikt nie testował biblioteki? Szkoda (dla mnie winksmiley.jpg).
e-Gandalf
Pomijasz bardzo wazna sprawe.. przeciez PHP5 jest 100% kompatybilne wstecz. Co moim zdaniem jest najgorsza rzecza jaka mogli zrobic. utrzymywac 100% bagarzu kompatybilnosci z koszmarnym jezykiem jakim byl php4 w imie... wlasnie chyba w imie wygody uzytkownika (czyli programisty przenoszacego kod).
hawk
Eee tam... PHP5 prawie nic nie zmienia, tylko dodaje nowe rzeczy. Można stosować interfejsy - można nie stosować. Można stosować private, protected, etc. - można nie stosować, w końcu chyba w innych językach też public jest domyślne. Itd.
Ozzy
Cytat
PHP5 prawie nic nie zmienia

Zapominasz o polach i metodach statycznych:)
Poza tym interfejsy i klasy abstrakcyjne są czasem bardzo przydatne.
jaco
Cytat
Cytat
PHP5 prawie nic nie zmienia

Zapominasz o polach i metodach statycznych:)
Poza tym interfejsy i klasy abstrakcyjne są czasem bardzo przydatne.


Co nie zmienia faktu, ze to sa nowosci a nie zmiany starych elementow smile.gif
Bora
Przydatna byłaby składnia mysql.
Na serwerach gdzie nie ma mysql można by było używać tą biblioteczke zastępczo.
Bags_Bunny
z tego co widac po kodzie autor planuje taka opcje smile.gif
Ozzy
istnieje jeszcze coś takiego: http://sourceforge.net/projects/ffdb-php/
tyle że bez sql'a
DeyV
albo http://sourceforge.net/projects/textdb - nawet z zaczątkiem sql, za to chyba już nie rozwijane.
Bags_Bunny
jest txt-db-api czy cos w ten desen (nie pamietam adresu ale mozna latwo wygooglowac) i to ma sql ale niestety nie jest to pelna obsluga, m.in nie ma alter, pozatym auto_increment dziala jak by chcial a nie mogl.. imho najlepsza baza na plikach txt jest sqlite ktory ma naprawde porzadna obsluge - szkoda tylko ze nie ma go w standardzie w php4 :|
splatch
A ja skrypt będę robić i tak dalej smile.gif. Lepiej byście potestowali go i wytknęli mi jakieś błędy...
Bora
no to od początku.
mysql_query:
powinno tylko zwracac uchwyt do pliku z danymi oraz z rozpoznaniem jakie dane musi pobierać.
czyli:
dla przykłądu wezme tabele users bo zawiera najwiecej rekordów
1 wpis:
Kod
1;splatch;40ba6f89a60388a30d77f9ca07133fb8;*;

struktura:
Kod
id;int;11;1;;

login;varchar;250;0;;

password;varchar;32;0;;

bazy;varchar;250;0;*;

sprawdzamy tylko które pola są nam potrzebne
[php:1:327746efb0]<?php
$query = $x->select( 'id,login', 'users' );
?>[/php:1:327746efb0]
czyli potrzebujemy tylko 1'szy i 2'gi wpis
mysql_fetch:
pobieranie rekordów az sie znadzie tylko ten pasującu do kryteriów.
[php:1:327746efb0]<?php
$fp = fopen('data.txt','r');
$line="";
$string="";
while ($line != "n")
{
fseek($fp, $pos);
$line = fgetc($fp);
$pos = $pos + 1;
$string.=$line;
}
$string= substr($string, 0, $pos-2);
var_dump($pos,$string);
?>[/php:1:327746efb0]
robimy explode(":",$string)
i zwracamy tylko te co nas interesują, czyli 0 i 1.
Przy następnym pobieraniu odczytujemy od pozycji po poprzednim odczycie.
w ten spsobó można również zrobić where.
tylko czy to jest wydajny spsoób przy dużych plikach??
splatch
Zostawmy php5 i zajijmy się w końcu skryptem!
Chewolf
A to widzieliście questionmark.gif :
http://txtsql.sourceforge.net/
Bora
poprawiona przezenie wersja.
Troche leżała nieużywana.
Zapraszam do testowania i dodawania włąsnych propozycji.
żródła
Narazie jest tylko SELECT obsługuje on LIMIT i WHERE.
Składnia taka jak stosowana w mysql.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.