Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

struktura foldera u bazi

[es] :: .NET :: struktura foldera u bazi

[ Pregleda: 1830 | Odgovora: 5 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Deep|Blue
Srce Srbije

Član broj: 631
Poruke: 1063
*.ptt.yu

ICQ: 101830817


Profil

icon struktura foldera u bazi11.03.2004. u 23:00

Jel ima neko ideju za cuvanje strukture foldera u bazi. ne mogu da spakujem bazu, da ne bude redudantna i da se relativno jednostavno moze izvesti select.
Dragi boze koji jesi, gore na nebesima
Sorry što te davim u ovaj kasni sat
Ali, ja prije svitanja imam jos par pitanja
11.03.2004. u 23:00 

blackman
Opština Pirot
PI

Član broj: 14516
Poruke: 43
195.252.107.*



Profil

icon Re: struktura foldera u bazi12.03.2004. u 09:11
Ako sam te dobro razumeo, treba da stavis u neku tabelu strukturu foldera.

Ono sto bi trebalo da ti pomogne je da napravis jednu tabelu koja ce da sadrzi
polje "root..." sa ID-om glavnog foldera, polje "subfold..." sa ID-om subfoldera
i polje "namesub..." sa nazivom subfoldera.

Select iz ovakve tabele bi bio jednostavan.

Pozdrav !
12.03.2004. u 09:11 

mmix
Miljan Mitrovic
Software Architect
Pancevo, Srbija

SuperModerator
Član broj: 17944
Poruke: 2407
193.203.9.*



Profil

icon Re: struktura foldera u bazi12.03.2004. u 10:39
Imaš više načina da skladištiš folder strukturu u bazi. Najjednostavnija za tovarenje je:

FolderID int identity
ParentID int (autoreference na FolderID)
FolderName nvarchar(xxx)

gde ćeš root folder da ubaciš kao parent samom sebi. Strutkura je veoma efikasna, lako se širi i po horizontali i vertikali i omogućava neke komplikovane akcije kao što je MOVE celog stabla nekog foldera sa jednog mesta na drugo. Ovaj sistem je zapravo preslikan realni file-sistem.
Problem sa ovom strukturom je selektovanje određene vrste podataka, npr. "daj mi sve foldere 3 nivoa", "daj mi punu putanju svih krajnjih foldera" Struktura je rekurzivna pa joj SELECT ne leži baš najbolje. Problem je i multi-level parenting, tj. ako je folder A ćaća B-u a B ćaća C-u i ti sa update uradiš MOVE tako da C postane ćale od B, B i C će pokazivati jedan na drugog a niko neće pokazivati na njih, tako da će postati siročići, dakle potrebno je i u samom kodu održavati integritet podataka.

Druga alternativa je tabela:

FolderPosition int
FolderName nvarchar(xxx)

root folder nije prisutan (ili mu je position = NULL). Svi folderi prvog nivoa imaju position od 1-9, drugog nivoa od 10-99, trećeg 100-999. Roditeljstvo se uspostavlja stepenom desetke, tj. folderu čiji je position 234, parent je folder 23, a njemu folder 2. Ograničenja po horizontali su očigledna (max 9 foldera u root-u, svaki folder maximalno 10 podfoldera), ali se ovo može proširiti na uštrb vertikalnog ograničenja, tako što ćete parenting raditi po stepenu većem od 10 (recimo hex, 16)
Pošto svaki folder nosi svoju poziciju ne treba rekurzija da bi se odredio nivo određenog foldera i može se lako doći do bilo kog foldera iznad njega. Problem je što nikakav SQL referential integrity ovde ne pomaže, sve mora da se održava u kodu. Inače, ovaj sistem koristi 99% knjigovodstvenog softvera koji sam video kod nas da opiše sintetiku i analitiku (uglavnom se koriste stringovi za position), samo što je kod za održavanje integriteta uglavnom nepostojeći/loš.

U svakom slučaju ovo je jedna od retkih situacija u kojima može da se kaže "reduntantnost je dobra". Po svojoj prirodi ove baze se mnogo više čitaju nego što im se menja sadržaj tako da je ekstra vreme utrošeno da se stvore redundantni podaci i da se softverski održi integritet između tih redundantnih podataka se višestruko isplati u brzini vađenja informacija. Dakle, stavi na papir SVE query-e koje hoćeš da imaš (opisno), onda za svaki izvuci neki metod koji će ti omogućiti brzo izvršavanje i onda sva "skupa" polja ma koliko redundantna bila ubaci u tabelu i napravi dobar kod za insert/update.

▪ The quicker a phone is answered in sales, the slower it's answered in customer services - Brownridge's Law
▪ Democracy is a device that ensures we shall be governed no better than we deserve - George Bernard Shaw
▪ To err is human--and to blame it on a computer is even more so - Robert Orben
12.03.2004. u 10:39 

jablan
Mladen Jablanović
Beograd

Član broj: 8286
Poruke: 3322
*.yubc.net

Sajt: blog.radioni.ca


Profil

icon Re: struktura foldera u bazi12.03.2004. u 13:49
A mozda ti je najjednostavniji nacin (doduse slican drugom mmixovom resenju) da u jednom polju drzis ceo path (i eventualno nivo u jednom int polju). jeste redundantno, ali je brzo. Pod uslovom da ti nazivi foldera nisu predugacki.


12.03.2004. u 13:49 

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1656
*.dialup.neobee.net.

Sajt: www.clickersoftware.com


Profil

icon Re: struktura foldera u bazi12.03.2004. u 23:34
Mogu ti preneti svoja iskustva.
Radio sam na oba navedena nacina (mmix - hvala na elaboraciji), sa tim da sam za manipulaciju clanovima strukture u aplikacijama koristio treeview kontrolu - koja sama po sebi vec ima ugradjene kontrolne mehanizme (jedinstvena vrednost svakog node-a, nije moguc crossreference, nivoi, putanje ...).
Procedura je bila:
1.Rekurzivno punjenje treeview-a iz tabele
2.Korisnik manipulise podacima
3.Ako korisnik zeli da sacuva izmene, cela struktura se vraca nazad u tabelu
vidi GoranVucicevic #28045

www.clickersoftware.com
12.03.2004. u 23:34 

Dejan Lozanovic
Dejan Lozanovic
Beograd

Član broj: 691
Poruke: 2062
*.vdial.verat.net

Jabber: null@elitesecurity.org


Profil

icon Re: struktura foldera u bazi27.03.2004. u 14:02
Sve metode koje ste naveli su dobre kada se radi o brzom unosu medjutim citanje takve strukture je sporo. Pao mi je na pamet metod koji je optimizovan za brzo citanje, mana sa druge strane je relativno komplikovan unos i relativno komplikovan update ;).

Primer stabla(direktorijuma)
Code:

/mnt
   | hardc
         | mp3 
   | cdrom
   | floppy
 /home
     | dejan
           |.kde

tablea dir ima (ID, ime), i tabela relacija ima (roditelj,dete,dubina)
Code:

dir
ID |  Ime
------------
1   | mnt
2   | hardc
3   |  mp3
4   | cdrom
5   |  floppy
6   |  home
7   |  dejan
8   | .kde


tablea relacija

Code:

idR | idD | dubina
------------------------
1    |  1     |   0
2    |   2    |  0
...
8    |   8     | 0
1    |   2     |  1
1     |   3    |  2
2     |   3    | 1
1     |   4    | 1
1     |  5     | 1
6     |  7     | 1
6     |  8     | 2
7     |  8     | 1

Problem je samo sto se za svaki direktorijum unosi n slogova gde je n njegova dubina. Ali lako dobijate primera radi direktorijume koji su podirektorijumi ili koji su nad direktorijumi datog direktorijuma itd... Vrednosti sa dubinom 0 i nisu morali da se unose ali ovako ubrzavaju stvari jos malo, ne morate sami explicitno da dodajete i taj direktorijum koji trazite ako vam treba.

"E tako se to radi , kratko ali j.e.b.i.t.a.c.n.o"
Degojs car - http://www.elitesecurity.org/t306994
27.03.2004. u 14:02 

[es] :: .NET :: struktura foldera u bazi

[ Pregleda: 1830 | Odgovora: 5 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.