Toon posts:

[SQL] table maken van directory-structuur

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoihoi,


Ik heb een beetje hulp nodig voor het ontwerpen van een SQL-tabel. Ik zou namelijk alle mappen van een directory-structuur in een SQL-tabel willen zetten. Maar ik vraag mij een beetje af hoe ik dit het beste zou doen... Eén enkele tabel? Of meerdere?

Eén enkele tabel is vrij gemakkelijk voor het ontwerpen, maar ik vermoed dat queries erop uitvoeren iets moeilijker gaat worden, of denk ik nu verkeerd? (ben redelijk "newbie" in de SQL-wereld)

Dit is wat mij het makkelijkst lijkt:
code:
1
2
3
4
DIRECTORIES
- directoriesId
- directoriesName
- directoriesReferenceId

Die 'directoriesReferenceId' verwijst dan naar de 'directoriesId' van de bovenliggende map of naar '0' als deze map de "hoogste" is. Dit lijkt mij te kloppen?

Maar hoe zou een query er dan moeten uitzien als ik bijvoorbeeld het path van een subsubsubsub-map zou willen opvragen adhv het 'directoriesId' van die subsubsubsub-map?


Alvast dank voor de tips...

fonske


PS: heeft iemand een idee hoe dat eigenlijk gedaan wordt in een database-ondersteund filesystem?

  • Swa-baldie
  • Registratie: Juni 2002
  • Laatst online: 19-06-2023
Opzet is niet verkeerd. Verder zou je deze dan kunnen querien dmv een hierarisch oplossing

  • hommer
  • Registratie: September 2000
  • Laatst online: 10:00
Ik had een vergelijkbaar probleem gepost in dit toppic: [rml][ MySQL] DB opbouw/query probleempje[/rml]
Waarbij de link naar deze pagina mij erg van pas is gekomen: http://www.sitepoint.com/article/hierarchical-data-database/
Misschien kun je er wat mee, met name het preorderd tree traversel systeem werkt erg goed.

t.k.a. sig space t.e.a.b.


Verwijderd

Verwijderd schreef op donderdag 14 april 2005 @ 06:45:
Die 'directoriesReferenceId' verwijst dan naar de 'directoriesId' van de bovenliggende map of naar '0' als deze map de "hoogste" is. Dit lijkt mij te kloppen?
'directoriesId' = NULL voor de 'hoogste map' (root directory) is volgens mij beter, als er '0' in staat verwijst die eigenlijk naar het record met 'directoriesId' = 0

Je spreekt van een filesysteem, waar zijn dan de files. Als ik het zou maken dan zou ik directories en files in dezelfde tabel steken

Verwijderd

Topicstarter
@hommes

Die 'preorderd tree traversel systeem' lijkt inderdaad handig om mee te werken als je data redelijk statisch is. Voor een overzicht van een directory-structuur lijkt mij het dan ook niet echt de beste methode.


@SiLVeR-C-HaiR

Die 'NULL' is idd een goede opmerking. Over het filesysteem, het is niet echt de bedoeling om een volledig filesysteem te gaan creëren. Ik zou gewoon bepaalde files moeten kunnen linken aan een directory om het volledige path te kunnen achterhalen. De reden waarom ik de directories en de files in verschillende tabellen steek is omdat ik over files veel meer informatie moet kunnen opslaan (anders ga je een tabel krijgen met enorm veel NULL in).


@Swa-baldie

Kan je misschien wat meer vertellen over die hierarchische methode (want naar hetgeen ik gelezen heb biedt MySQL geen ondersteuning voor hiërarchische queries). Waar ik na 2sec nadenken kan opkomen is het volgende (en dit is zeker niet het meest efficiënte...):
PHP:
1
2
3
4
5
6
7
8
9
10
11
$path='';

$data=$db->query("SELECT * FROM directories WHERE directoriesId='4'");

$path=.$data[0]['directoriesName'];

WHILE ( $data[0]['directoriesReferenceId']!=NULL )
{
   $data=$db->query("SELECT * FROM directories WHERE directoriesId=$data[0]['directoriesRefrenceId']");
   $path=.$data[0]['directoriesName'];
}

Maar het kan niet zijn dat deze methode de meest efficiënte is...


PS: PHP-code is zeer vlug geschreven en zal bijgevolg ook niet 100% kloppen (het gaat enkel om het idee)

[ Voor 10% gewijzigd door Verwijderd op 14-04-2005 09:17 . Reden: typo's & PS ]


  • Swa-baldie
  • Registratie: Juni 2002
  • Laatst online: 19-06-2023
@Fonsk3
Helaas te weinig kennis van MySQL om je mee te helpen. Het is ieder geval op te lossen in Oracle met connect by en prior.

Verwijderd

Swa-baldie schreef op donderdag 14 april 2005 @ 09:22:
@Fonsk3
Helaas te weinig kennis van MySQL om je mee te helpen. Het is ieder geval op te lossen in Oracle met connect by en prior.
MySQL : New Features Planned for the Near Future dus niet in versie 5.0 of 5.1 en het staat al enkele jaren op de verlanglijst. Ik denk dat we nog wat geduld moeten hebben.

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Ik zou directoriesReferenceId trouwens veranderen naar directoriesParentId of directoriesParentDirectoryId, dat zegt iets meer imo. Verder ziet het er goed uit.

Noushka's Magnificent Dream | Unity

Pagina: 1