|
| En eller flere tabeller Fra : Ukendt |
Dato : 13-02-09 22:58 |
|
Hej.
Jeg har brug for lidt eksperthjælp til den optimale opbygning af en
database, der skal ligge bag en hjemmeside. Det er lavet i MS SQL 2005
Express.
Webstedets indhold er data hentet fra databasen.
Hjemmesidens sider deles op i forskellige kategorier
Inde i mit administrationsområde skal jeg kunne få vist en liste over -
enten alle sider eller opdelt efter kategori. Derfor har jeg lavet en tabel
der hedder Category med catID og catName
I nævnte liste skal jeg kunne se et ikon, om siden er offentlig eller ikke
offentlig. Jeg skal kunne se sidens ID (integer), dato, titlen på siden,
kategorien, forfatteren samt antallet af hits, som jeg også vil gemme og
vise.
Til sidst skal jeg på selve siden kunne se selve indholdet.
Mit spørgsmål går nu på, om jeg bør oprette det i en eller flere tabeller og
HVOR selve delingen evt. skal være.
De bedste hilsener
| |
Troels Arvin (14-02-2009)
| Kommentar Fra : Troels Arvin |
Dato : 14-02-09 14:08 |
|
Niels Ravn wrote:
> Inde i mit administrationsområde skal jeg kunne få vist en liste over -
> enten alle sider eller opdelt efter kategori. Derfor har jeg lavet en
> tabel der hedder Category med catID og catName
Du kan nøjes med kolonnen catName i denne tabel: Du vil vel ikke have
flere kategorier med samme navn? Hvis du dropper det intetsigende catID,
vil du stadig kunne holde snor i dine kategorier, men du kan slippe for
konstant at skulle join'e mellem side-tabellen og kategori-tabellen. (Din
side-tabel bliver en anelse mere omfangsrig, hvis du gemmer kategorien
som tekst, men det opvejes at mindre behov for jons. Og hvis du dropper
catID, bliver din datamodel og dine queries simplere.)
Bemærk: Det forbedrer ikke normaliseringsgraden at indskyde ID-kolonner.
> I nævnte liste skal jeg kunne se et ikon, om siden er offentlig eller
> ikke offentlig. Jeg skal kunne se sidens ID (integer), dato, titlen på
> siden, kategorien, forfatteren samt antallet af hits, som jeg også vil
> gemme og vise.
Overvej, om en side skal kunne indgå i flere kategorier. I så fald er der
måske mere tale om "tags" i stedet for kategorier. Og i få fald bliver
man nødt til at indsætte en mange-til-mange associationstabel mellem
kategori- og side-tabellerne.
Overvej din sidetælle-logik: Hvis der kommer meget pres på siderne, kan
det skabe låsnings-situationer, hvis en sidevisning må vente på, at der
lige opdateres side-tæller for en anden brugers besøg. Hvis jeg var dig,
ville jeg i stedet indsætte en række i en særlig optællingstabel for
hvert besøg, og så engang imellem foretage nogle udtræk som kunne give
dig den ønskede hit-opgørelse. - Eller jeg ville se, om jeg ikke bare
kunne benytte mig af web-serverens logfil.
--
Troels
| |
Ukendt (14-02-2009)
| Kommentar Fra : Ukendt |
Dato : 14-02-09 17:32 |
|
"Troels Arvin" <troels@arvin.dk> skrev i en meddelelse
news:gn6fn5$eva$1@news.net.uni-c.dk...
> Niels Ravn wrote:
>> Inde i mit administrationsområde skal jeg kunne få vist en liste over -
>> enten alle sider eller opdelt efter kategori. Derfor har jeg lavet en
>> tabel der hedder Category med catID og catName
>
> Du kan nøjes med kolonnen catName i denne tabel: Du vil vel ikke have
> flere kategorier med samme navn? Hvis du dropper det intetsigende catID,
> vil du stadig kunne holde snor i dine kategorier, men du kan slippe for
> konstant at skulle join'e mellem side-tabellen og kategori-tabellen. (Din
> side-tabel bliver en anelse mere omfangsrig, hvis du gemmer kategorien
> som tekst, men det opvejes at mindre behov for jons. Og hvis du dropper
> catID, bliver din datamodel og dine queries simplere.)
>
> Bemærk: Det forbedrer ikke normaliseringsgraden at indskyde ID-kolonner.
>
>> I nævnte liste skal jeg kunne se et ikon, om siden er offentlig eller
>> ikke offentlig. Jeg skal kunne se sidens ID (integer), dato, titlen på
>> siden, kategorien, forfatteren samt antallet af hits, som jeg også vil
>> gemme og vise.
>
> Overvej, om en side skal kunne indgå i flere kategorier. I så fald er der
> måske mere tale om "tags" i stedet for kategorier. Og i få fald bliver
> man nødt til at indsætte en mange-til-mange associationstabel mellem
> kategori- og side-tabellerne.
>
> Overvej din sidetælle-logik: Hvis der kommer meget pres på siderne, kan
> det skabe låsnings-situationer, hvis en sidevisning må vente på, at der
> lige opdateres side-tæller for en anden brugers besøg. Hvis jeg var dig,
> ville jeg i stedet indsætte en række i en særlig optællingstabel for
> hvert besøg, og så engang imellem foretage nogle udtræk som kunne give
> dig den ønskede hit-opgørelse. - Eller jeg ville se, om jeg ikke bare
> kunne benytte mig af web-serverens logfil.
Hej Troels.
Det var lærerigt. Jeg kigger på det.
Ha' det rart
| |
Leif Neland (16-02-2009)
| Kommentar Fra : Leif Neland |
Dato : 16-02-09 18:57 |
|
>
> Overvej din sidetælle-logik: Hvis der kommer meget pres på siderne, kan
> det skabe låsnings-situationer, hvis en sidevisning må vente på, at der
> lige opdateres side-tæller for en anden brugers besøg. Hvis jeg var dig,
> ville jeg i stedet indsætte en række i en særlig optællingstabel for
> hvert besøg, og så engang imellem foretage nogle udtræk som kunne give
> dig den ønskede hit-opgørelse. - Eller jeg ville se, om jeg ikke bare
> kunne benytte mig af web-serverens logfil.
At have tælleren indbygget i indholdstabellen er også uhensigtsmæssigt
af to grunde:
1: Hvis du kører incrementalbackup, så er det en record på måske et par
KB, der bliver ændret. Er tælleren i en separat tabel, er det kun et par
bytes. Så din diff bliver meget mindre.
2: Et "sidst opdateret" felt kan ikke køre med automatisk opdatering
(timestamp), da det jo vil blive opdateret hver gang der er et hit.
Så du må selv opdatere timestamp, når du opdaterer indholdet.
(Kan dog klares med "UPDATE contents SET hits=hits+1,
sidst_opdateret=sidst_opdateret WHERE id=..."
Leif
| |
|
|