/ 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
Forskellige datatyper
Fra : Lars Olesen


Dato : 09-03-04 14:31

Jeg sidder og arbejder med et mini-publiceringssystem. Jeg har opbygget
det med følgende klasser:

- Page: Den holder styr på alt, det er nødvendigt at vide om den enkelte
side. Alle siderne er bygget op med, at man sætter elementer ind på
siden, fx et billede, en tekst, et link osv. Page kalder bl.a.
Elementklasserne for at de bliver vist rigtigt.

- Element: Holder styr på alle elementerne. Der er oprettet særskilte
klasser til fx billede, tekst og link, fordi de alle skal have
forskellige parametre for at blive vist korrekt. Her ligger metoder til
fremvisning og redigeringen af elementerne også (disse er jo også
forskellige).

- Parameter: Her holdes styr på de forskellige parametre der kan være.
Den gemmer hovedsageligt og henter dem ud af databasen igen.

Nu er mit spørgsmål: Jeg skal jo have gemt rimelig meget i
parameter-databsen på formen:

parameter | content

Men content kan jo være mange forskellige ting. Måske er det en lang,
lang tekst (altså datatypen burde være text). Det kan også være en lille
kort tekst, som fx ved billedet, som skal være til ventre (der ville det
være align | left). Endelig kan man også forestille sig, at det kan være
et tal.

Er der nogen datatyper, som kan håndtere disse rimelig forskellige input
- eller hvad kan jeg alternativt gøre for ikke at skulle sætte alle
felter til text (hvilket jo nok ikke er det bedste for databasen).

--
Lars Olesen
Konkurrence på <http://www.fodboldenslegestue.dk>
Kan det gøres bedre? Navigation og brugervenlighed!

 
 
Troels Arvin (09-03-2004)
Kommentar
Fra : Troels Arvin


Dato : 09-03-04 14:53

On Tue, 09 Mar 2004 14:31:08 +0100, Lars Olesen wrote:

> Er der nogen datatyper, som kan håndtere disse rimelig forskellige input
> - eller hvad kan jeg alternativt gøre for ikke at skulle sætte alle
> felter til text (hvilket jo nok ikke er det bedste for databasen).

Hvilket DBMS?

--
Greetings from Troels Arvin, Copenhagen, Denmark


Lars Olesen (09-03-2004)
Kommentar
Fra : Lars Olesen


Dato : 09-03-04 15:13

Troels Arvin wrote:

>>Er der nogen datatyper, som kan håndtere disse rimelig forskellige input
>>- eller hvad kan jeg alternativt gøre for ikke at skulle sætte alle
>>felter til text (hvilket jo nok ikke er det bedste for databasen).
>
> Hvilket DBMS?

Gad vide, hvad det lige betyder :) Jeg går ud fra, at du spørger om
databasen, som er en MySql :)

--
Lars Olesen
Konkurrence på <http://www.fodboldenslegestue.dk>
Kan det gøres bedre? Navigation og brugervenlighed!

Kim Andersen (09-03-2004)
Kommentar
Fra : Kim Andersen


Dato : 09-03-04 15:54

Du kan evt. bruge en TEXT type i MySQL til at gemme dine parameter i.

Evt. som dette.

"imagetext|Da vi var ude og fiske\nbigtext|Du skal du bare
se....\nurl|http://minefoto/ferie/img.jpg"


/Kim



Lars Olesen (09-03-2004)
Kommentar
Fra : Lars Olesen


Dato : 09-03-04 16:05

Kim Andersen wrote:

> "imagetext|Da vi var ude og fiske\nbigtext|Du skal du bare
> se....\nurl|http://minefoto/ferie/img.jpg"

Først, så bruger jeg to felter, altså et parameter felt og et content
felt. Parameterfeltet har varchar(255). Så siger du, at content-feltet
kan have typen text, men er det god databasestrategi, hvis nu fx kun det
kommer til at indeholde et tal?


--
Lars Olesen
Konkurrence på <http://www.fodboldenslegestue.dk>
Kan det gøres bedre? Navigation og brugervenlighed!

Kim Andersen (09-03-2004)
Kommentar
Fra : Kim Andersen


Dato : 09-03-04 16:30

> > "imagetext|Da vi var ude og fiske\nbigtext|Det skal du bare
> > se....\nurl|http://minefoto/ferie/img.jpg"
>
> Først, så bruger jeg to felter, altså et parameter felt og et content
> felt. Parameterfeltet har varchar(255). Så siger du, at content-feltet
> kan have typen text, men er det god databasestrategi, hvis nu fx kun det
> kommer til at indeholde et tal?

Grunden til en TEXT type, var at du jo ikke kender parameter antal og at det
kan være hvad som helst. Dog kun tekst.
Jeg ville vælge en TEXT type, da den jo kan indeholde en masse tekst og tal
(Alså ikke tal tal som i en INT, men tekst tal.).

/Kim



Lars Olesen (10-03-2004)
Kommentar
Fra : Lars Olesen


Dato : 10-03-04 09:57

Kim Andersen wrote:

> Grunden til en TEXT type, var at du jo ikke kender parameter antal og at det
> kan være hvad som helst. Dog kun tekst.
> Jeg ville vælge en TEXT type, da den jo kan indeholde en masse tekst og tal
> (Alså ikke tal tal som i en INT, men tekst tal.).

Ja, og det er jo ikke det store problem, for så kan jeg bare, når jeg
trækker parameter-content ud lave settype($value, "integer");

Ofte vil parameterne indeholde tekst, som ville kunne være i
varchar(255), men hver sjette post vil indeholde tekst, der bør gemmes i
text. Mere sjældent bør parameter-content gemmes i int(11).

Spørgsmålet går også lidt på, om det er en sund databasestrategi at
vælge datatypen text?

--
Lars Olesen
Konkurrence på <http://www.fodboldenslegestue.dk>
Kan det gøres bedre? Navigation og brugervenlighed!

No1 (14-03-2004)
Kommentar
Fra : No1


Dato : 14-03-04 00:29

> - Element: Holder styr på alle elementerne. Der er oprettet særskilte
> klasser til fx billede, tekst og link, fordi de alle skal have
> forskellige parametre for at blive vist korrekt. Her ligger metoder til
> fremvisning og redigeringen af elementerne også (disse er jo også
> forskellige).
>
> - Parameter: Her holdes styr på de forskellige parametre der kan være.
> Den gemmer hovedsageligt og henter dem ud af databasen igen.

Hvad er Parameter-klassens job? Kun at sørge for persistens (dvs. at
data ikke går tabt når programmet ikke længere kører)? Nedarver Element
og Page klasserne denne funktionalitet fra Parameter klassen?

Jeg ville måske lave en tabel til hver klasse. Dvs. en billede-, tekst-,
og linktabel i databasen. Så kan du også bruge en passende datatype i
databasen. Et billede skal måske både have en URL, width og height.

Lars Olesen (14-03-2004)
Kommentar
Fra : Lars Olesen


Dato : 14-03-04 09:10

No1 wrote:

> Hvad er Parameter-klassens job? Kun at sørge for persistens (dvs. at
> data ikke går tabt når programmet ikke længere kører)? Nedarver Element
> og Page klasserne denne funktionalitet fra Parameter klassen?
>
> Jeg ville måske lave en tabel til hver klasse. Dvs. en billede-, tekst-,
> og linktabel i databasen. Så kan du også bruge en passende datatype i
> databasen. Et billede skal måske både have en URL, width og height.

Parameterklassen har en tabel tilknyttet. Den tabel har to kolonner:
parameter og value.

Elementklassen kan have en type. De forskellige typer kræver forskellige
data, fx et billede, et link og noget tekst. Elementklassen har nogle
underklasser, fx class LinkElement extends Element. LinkElement holder
så styr på, hvad der bør gemmes. For at undgå et system med for mange
tabeller, lægges væredierne i parameter-tabellen, for den kan jo gemme
på følgende måde ved fx et billede:

ELEMENT
type_id overskrift
-------------------------------------
1 = billede På fisketur

PARAMETER
parameter value
-------------------------------------
url http://www.legestue.net/
width 210
height 230


I øvrigt har jeg vist efterhånden læst mig frem til, at et text felt
egentlig kan betragtes som et uendeligt varchar-felt. Det betyder, at
der ikke skulle være de store problemer i at gemme som text. Integer kan
jeg så sætte datatypen på, når de kommer ud af databasen.

--
Lars Olesen
Konkurrence på <http://www.fodboldenslegestue.dk>
Kan det gøres bedre? Navigation og brugervenlighed!

No1 (14-03-2004)
Kommentar
Fra : No1


Dato : 14-03-04 19:38

> Elementklassen kan have en type. De forskellige typer kræver forskellige
> data, fx et billede, et link og noget tekst. Elementklassen har nogle
> underklasser, fx class LinkElement extends Element. LinkElement holder
> så styr på, hvad der bør gemmes. For at undgå et system med for mange
> tabeller, lægges væredierne i parameter-tabellen, for den kan jo gemme
> på følgende måde ved fx et billede:

Nedarver Element fra Parameter? Dvs. "Element extends Parameter"? Du kan
jo lave det så smart at du fx siger:

$nytlink = new LinkElement("http://urlblabla");
$nytlink_id = $nytlink->save();
echo "link gemt med id: $nytlink_id."
metoden "save()" kan så ligge i din Parameter-klasse og sørge for at
gemme elementet.

> ELEMENT
> type_id overskrift
> -------------------------------------
> 1 = billede På fisketur
>
> PARAMETER
> parameter value
> -------------------------------------
> url http://www.legestue.net/
> width 210
> height 230
>
> I øvrigt har jeg vist efterhånden læst mig frem til, at et text felt
> egentlig kan betragtes som et uendeligt varchar-felt. Det betyder, at
> der ikke skulle være de store problemer i at gemme som text. Integer kan
> jeg så sætte datatypen på, når de kommer ud af databasen.


Ja, det gør i hvertfald at du ikke behøver at tænke så meget på
databasen, når du opretter nye typer af elementer. Det behøver dog ikke
at være så besværligt igen.

Hvis du ikke har performance problemer, er der ikke nogen grund til at
bruge tid på at bekymre sig om det, så det er sikkert ok.

Lars Olesen (14-03-2004)
Kommentar
Fra : Lars Olesen


Dato : 14-03-04 20:06

No1 wrote:

> Nedarver Element fra Parameter? Dvs. "Element extends Parameter"? Du kan
> jo lave det så smart at du fx siger:
>
> $nytlink = new LinkElement("http://urlblabla");
> $nytlink_id = $nytlink->save();
> echo "link gemt med id: $nytlink_id."
> metoden "save()" kan så ligge i din Parameter-klasse og sørge for at
> gemme elementet.

Jeg har lavet det nogenlunde sådan her:

class LinkElement extends Element
{

var $parameter;

function LinkElement()
{
$this->parameter = new Parameter();
}

function save($var) // $var (array)
{
$db = new DB_Sql("INSERT INTO element ...");
$this->parameter->save("url", $var['link']);
$this->parameter->save("linktekst", $var['linktekst']);
}

}

class Parameter
{

var $db;

function Parameter()
{
$this->db = new DB_Sql();
}

function save($parameter, $value)
{
$this->db->query("INSERT INTO parameter SET...");
}

}


> Hvis du ikke har performance problemer, er der ikke nogen grund til at
> bruge tid på at bekymre sig om det, så det er sikkert ok.

Jeg har ikke performanceproblemer, men ville bare gerne lave det
ordentligt. En demo af systemet kan ses på:

<http://www.legestue.net/websites/admin/>

login: usenet@legestue.net
passw: usenet

Den giver følgende output-side:

<http://www.legestue.net/websites/test/>

Systemet er et indholdssystem, og det er ikke muligt at lave om på
layoutet fra systemet.

--
Lars Olesen
Konkurrence på <http://www.fodboldenslegestue.dk>
Kan det gøres bedre? Navigation og brugervenlighed!

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

Månedens bedste
Årets bedste
Sidste års bedste