/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Objekt-orienteret: Database-objekt i PHP
Fra : Jesper H


Dato : 20-09-06 21:00

Hej alle

Jeg har valgt at poste dette spørgsmål i både database-gruppen og
PHP-gruppen, da det vedrører begge.


Jeg sidder med tre tabeller i samme MySQL database (5.0.22).
1. Den første tabel indeholder et kartotek over personer med
tilhørende personoplysninger og et person-id.
2. Den anden tabel indeholder oplysninger om forskellige udvalg, som de

førnævnte personer kan være medlem af.
3. Hver person kan være medlem af flere udvalg, hvert udvalg kan have
flere medlemmer, men hver person kan ikke være med i samme udvalg mere

end "en gang ad gangen". Dette organiseres derfor i den sidste tabel,
hvor hver række består af et person-id og et udvalgs-id.


Det er såmænd fint nok. Dataene skal præsenteres i PHP (5.1.4), og
man skal kunne "gøre forskellige ting med dem", så jeg tænkte at jeg

ville lave en klasse for personer og en klasse for udvalg, som jeg så
kan benytte mig af.


Her kommer så problemerne:
* Når jeg udskriver/viser informationerne for et udvalg, vil jeg gerne

sammen med udvalget have listet de personer, som er i udvalget, samt
deres informationer (kort).
* Når jeg udskriver informationerne for en person (langt) vil jeg
gerne kunne se hvilke udvalg, personen er med i - i alt fald udvalgets
navn og hjemmesideadresse, som er gemt i udvalgs-tabellen.
Problem: Det kan jeg ikke finde ud af på en "elegant" måde
Se evt. resultatet af min uelegante løsning her:
http://fdf.dk/landsdel1/leder/index.php
(Klikker man på navnet, får man personoplysningerne samt hvilke
udvalg personen er med i).


Hvordan stiller jeg dette op rent praktisk?
Er der en "smart" måde, så jeg undgår at lave en masse forskellige
SQL-søgninger i samme script, men kan holde det til nogle få? (af
performance-mæssige hensyn).
Skal selve link-tabellen laves som et slags objekt også? (og hvordan?)

Og kan det i det hele taget laves så generelt, at jeg kan holde disse
klasser adskilt, så jeg ikke skal rette i dem alle, hvis jeg ændrer
noget i den ene?


Evt. kunne jeg også godt tænke mig at have en klasse for sig med
database-adgangen (mysql_connect, osv.), men det kan vel vente til
senere.


Jeg har søgt på Google for at finde svar, men uden held. Hvis nogen
kender et link, kan det også fint bruges - vil tro at problematikken
er generel og løst før.


Mvh Jesper
--
http://fdf.dk/landsdel1/


 
 
Peter Farsinsen (20-09-2006)
Kommentar
Fra : Peter Farsinsen


Dato : 20-09-06 21:39

Jesper H wrote:

> Jeg har søgt på Google for at finde svar, men uden held. Hvis nogen
> kender et link, kan det også fint bruges - vil tro at problematikken
> er generel og løst før.

Problematikken er både generel og diskuteret til hudløshed - desværre
kan jeg ikke huske det rigtige begreb ;)

Spørgsmålet er om det er en egenskab af personen at være medlem af et
udvalg eller om det er en egenskab af udvalget at personen er medlem.
Uanset hvad du vælger (det kan desuden være en egenskab af begge
klasser, men det øger selvfølgelig muligheden for redundans) vil jeg
mene, at al kode der skal afgøre sammenhængen holdes samlet i den ene
klasse.

Jeg ville selv (uden nogen argumentation) håndtere dette i udvalgsklassen.

Pesudokode:

class Udvalg {
   private $udvalgs_id;
   private $medlemmer;
   
   public function __construct(&$dbo, $udvalgs_id) {
      $this->medlemmer = $this->getMedlemmer($udvalgs_id);
   }
   
   public function inUdvalg($person_id) {
      return in_array($person_id, $this->medlemmer);
   }
   
   private function getMedlemmer($udvalgs_id) {
      return $dbo->Query("SELECT id FROM from personer_i_udvalg WHERE
udvalgs_id = $udvalgs_id");
   }
}

Eksemplet skal selvfølgelig udviddes, men håber du fanger min pointe.
Hvis jeg skyder helt ved siden af, kan det være jeg prøver igen ;)

--
Peter Farsinsen
fornavn@efternavn.dk

Jesper H (21-09-2006)
Kommentar
Fra : Jesper H


Dato : 21-09-06 07:20


Peter Farsinsen skrev:
>
> Problematikken er både generel og diskuteret til hudløshed - desværre
> kan jeg ikke huske det rigtige begreb ;)
>
> Spørgsmålet er om det er en egenskab af personen at være medlem af et
> udvalg eller om det er en egenskab af udvalget at personen er medlem.
> Uanset hvad du vælger (det kan desuden være en egenskab af begge
> klasser, men det øger selvfølgelig muligheden for redundans) vil jeg
> mene, at al kode der skal afgøre sammenhængen holdes samlet i den ene
> klasse.
>
> Jeg ville selv (uden nogen argumentation) håndtere dette i udvalgsklassen.
>
> Pesudokode:
>
> class Udvalg {
>    private $udvalgs_id;
>    private $medlemmer;
>
>    public function __construct(&$dbo, $udvalgs_id) {
>       $this->medlemmer = $this->getMedlemmer($udvalgs_id);
>    }
>
>    public function inUdvalg($person_id) {
>       return in_array($person_id, $this->medlemmer);
>    }
>
>    private function getMedlemmer($udvalgs_id) {
>       return $dbo->Query("SELECT id FROM from personer_i_udvalg WHERE
> udvalgs_id = $udvalgs_id");
>    }
> }
>
> Eksemplet skal selvfølgelig udviddes, men håber du fanger min pointe.
> Hvis jeg skyder helt ved siden af, kan det være jeg prøver igen ;)
>
> --
> Peter Farsinsen
> fornavn@efternavn.dk

Hej Peter

Tjah, i det tilfælde vil jeg så nok vælge at lade personen være
"centrum", da denne også linker til andre tabeller (f.eks. hvilken
kreds, personen er med i, og sådan). Men okay, troede bare at de
skulle skilles ad i forskellige klasser.

Mvh
Jesper
--
http://fdf.dk/landsdel1/


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste