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