|
| 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!
| |
|
|