[DB/FS] structuur filesystem 'mappen' op RDBMS?

Pagina: 1
Acties:

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
Ik wil een eenvoudige "foto-album" webapplicatie gaan schrijven, maar zit te twijfelen wat nou de beste manier is om de afbeeldingen op het filesystem op te slaan. Ik gebruik een SQL database om metadata op te slaan:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
album
---------
id (PK)
parent_id
name
title

image
---------
id(PK)
album_id (FK album.id)
name
title
description
author
pubdate
moddate
views
...


Niets bijzonders dus. Het enige dat misschien opvalt, is dat er geen veld is voor pad/url. Mijn idee was om het pad samen te stellen uit album.name en image.name. Daarnaast is er voor elke image een x-aantal versies, bv een thumbnail, het origineel en een (op bv 800*600) geresizede versie. Allen hebben dezelfde naam (image.name), maar staan in een aparte directory:

code:
1
2
3
album/thumbs/plaatje.jpg
album/sized/plaatje.jpg
album/originals/plaatje.jpg


Op deze manier leg je geen banden aan het aantal mogelijke alternatieven voor wat in wezen hetzelfde plaatje is, en hoef je dus niet met een extra tabel voor urls te werken.

Zolang een album geen sub-albums heeft, lijkt dit me een prettig werkende oplossing. Maar wat nou als je een album2 hebt dat een sub-album is van album1. Is het dan mooier/beter om op het filesystem de volgende structuur te maken:

code:
1
2
3
4
5
6
album1/thumbs
album1/sized
album1/originals
album1/album2/thumbs
album1/album2/sized
album1/album2/originals


zodat de structuur op het filesystem overeenkomt met de in de database aangegeven genestheid, of laat je de parent-child relaties over aan de DB en 'mimic' je op het filesystem zo letterlijk mogelijk de databasetabellen:
code:
1
2
3
4
5
6
album1/thumbs
album1/sized
album1/originals
album2/thumbs
album2/sized
album2/originals


en laat je de parent-child relaties tussen albums dus aan de db over.

Op deze laatste manier kun je in principe een album maken met de naam 'originals', hetgeen bij de eerste oplossing voor een naamgevingsconflict gaat zorgen. De eerste manier daarentegen is ergens wat intuitiever, omdat het een bijna letterlijke representatie op het filesystem is van de in de db gemaakte structuur. Bovendien kunnen meerdere sub-albums dezelfde naam hebben, wat bij de tweede manier niet kan. Wat zouden jullie doen, of zouden jullie het sowieso helemaal niet zo aanpakken?

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
Waarom maak je niet één hele grote map waarin alle bestanden staan op basis van de id die het bestand in de db heeft gekregen... Het is dan aan jou om in de presentatielaag de mapweergave te regelen...

Heb zelf voor een downloadsmodule een tbl_downloads met

downloadID
bestandsnaam
bestandsbeschrijving
bestandsgrootte
contenttype
etc.

en een map "data"
met daarin bestanden [downloadID].data

mocht mijn database ooit corrupt gaan dan ben ik natuurlijk het zaatje, maar daarvoor hebben ze backups uitgevonden ;)

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
ja dat kan natuurlijk ook, maar ik vind het op zich wel een prettig idee dat er zonder database ook nog iets van structuur blijft bestaan. mocht idd de database naar de haaien gaan of ikzelf ;), dan lijkt me het wel prettig dat iemand met FTP access z'n albums toch nog kan redden en begrijpen.

het concept "sub-album" is overigens iets waar ik maar rekening mee houdt omdat er toch wel gebruikers zullen zijn die dit willen, maar imo metaforisch gezien niet zo sterk. ik bedoel, heb je ooit een fotoalbum gezien met daarin letterlijk een sub-album? de meeste mensen nemen ook de moeite niet om hoofdstukken aan te geven in een plakboek voor foto's...maargoed, in een fotoalbum webapp is dit toch wel zo'n beetje standaard...