Avatar billede somaliomar Praktikant
10. april 2003 - 20:37 Der er 59 kommentarer og
2 løsninger

Fleksibel database-design

Jeg er ved at designe en database til et artikel-system. Nu er jeg nået dertil hvor jeg skal kategorisere artiklerne. Designet skal overholde tre regler.

Regel 1: en kategori kan have flere under- og overkategorier. Et eks.:

- Styresystemer
  - Microsoft Windows
      - Windows XP Home
      - Windows XP Professional
      - Windows 2000 Professional
      - Windows NT Workstation
  - Linux
      - ...
-  Scripting
  - Server-Side
      - ASP
      - ASP.NET
      - PHP
      - ...
      - ...
  - Client-Side
      - JavaScript
      - VBScript
- Databaser
  - Cat
      - Cat
      - Cat
        - Cat
        - Cat
      - Cat
        - Cat
            - Cat
  - Cat

Regel 2: en artikel kan have flere kategorier.
Regel 3: en artikel skal "arve" de underliggende kategorier. F.eks. skal alle artikler i VBScript-kategorien også være medlem af Scripting-kategorien.

Spørgsmållet er nu: Hvordan laver jeg et fleksibel design som overholder alle de 3 regler? Jeg har allerede nu lavet et design der overholder de første to regler. Regel nr. 3 skal jeg programmere mig ud af.

Mit nuværende design består grundlæggende af tre tabeller:
tblCategories :              her registreres kategorierne
tblArticles:                  indeholder alle artikler
tblArticleCategoryLink:  relationen mellem artikler og kategorier


tblCategories
-------------
CategoryID          ParentCategory      CategoryName
1                        0                        Styresystemer
2                        1                        Microsoft Windows
3                        2                        Windows 2000 Professional
4                        2                        Windows XP Home
5                        2                        Windows XP Professional
6                        0                        Scripting
7                        6                        Server-Side
8                        7                        ASP
9                        6                        Client-Side
10                      7                        JavaScript


tblArticles
----------
ArticleID        HeadText              Body
1                  Bla bla                  Bla bla
2                  Bla bla                  Bla bla
3                  Bla bla                  Bla bla
4                  Bla bla                  Bla bla


tblArticleCategoryLink
---------------------
ArticleID              CategoryID
1                        3
1                        5
2                        8
3                        8
4                        10

Database-filen kan downloades på
Access 2000 http://www24.brinkster.com/limitz/db/test.mdb
Access 97 http://www24.brinkster.com/limitz/db/test97.mdb

Der må være en smartere måde at gøre det på. Nogen der ved hvordan Ekspertens database er designet?

Need help :)
Avatar billede henrik13 Nybegynder
10. april 2003 - 20:42 #1
Dine filer kan ikke dawnsloaddes. Linked virker ikke.
Avatar billede erikjacobsen Ekspert
10. april 2003 - 20:43 #2
1  Styresystemer
1.1    Microsoft Windows
1.1.1    Windows 2000 Professional
1.1.2    Windows XP Home
1.1.3    Windows XP Professional
2        Scripting
2.1      Server-Side
2.1.1      ASP
2.2      Client-Side
2.2.1    JavaScript

...måske... :)
Avatar billede somaliomar Praktikant
10. april 2003 - 20:46 #3
henrik13 >> Prøv istedet http://www24.brinkster.com/limitz/download.asp
erikjacobsen >> Hvad mener du med det? Kan jeg få dig til uddybe det?
Avatar billede erikjacobsen Ekspert
10. april 2003 - 20:47 #4
Tænk selv over det. Jeg vil ikke presse nogle forslag ned over
hovedet på dig. Kan du ikke se ideen, er den nok ikke god.
Avatar billede somaliomar Praktikant
10. april 2003 - 20:57 #5
Hmm... Det har jeg godt nok ikke tænkt over. Det lyder som en god ide. Men er der ikke andre måder at gøre det på?
Avatar billede arne_v Ekspert
10. april 2003 - 20:57 #6
Ideen med parent felt er nok den mest relationelle.

Men jeg er bange for at du dør i mystiske self joins i
applikationen.

Jeg kan se flere alternativer som *muligvis* er mere praktiske.

Først tror jeg du skal starte med at vedtage at artikler kun kan
hænge på en kategori i nederste niveau.

Hvis du så er villig til at definere at der er et fast antal
niveauer af kategorier f.eks. 3, så kan du koble ArticleID med
CategoryID_level1 + CategoryID_level2 + CategoryID_level3,
droppe parent kolonnen og lade din applikation sørge for
korrekt match mellem niveauerne.

Og så er det pludseligt nemt at søge på alle 3 niveauer.

Hvis du ikke bruge fast antal niveauer så synes jeg stadigvæk at du
skal droppe parent kolonnen og i.s.f. lave en tabel med kategori
struktur og så lade din applikation håndetere det ved at konvertere
en SELECT WHERE CategoriName= til en SELECT WHERE CategoriName IN
SELECT WHERE.

Bare nogle tanker.
Avatar billede somaliomar Praktikant
10. april 2003 - 20:59 #7
arne_v >> De tanker har jeg også gjort mig. Problemet er bare, at jeg ikke kan definere et fast antal kategori-niveuaer. Andre tanker?
Avatar billede arne_v Ekspert
10. april 2003 - 21:02 #8
Så er der jo min ide #2.

Drop parent kolonne. Lave en separat tabel med kategori struktur.

Og så lade applikationen omskrive far WHERE til WHERE IN SELECT.
Avatar billede somaliomar Praktikant
10. april 2003 - 21:03 #9
arne_v >> Jeg er ikke helt med? Kan du give et eksempel?
Avatar billede arne_v Ekspert
10. april 2003 - 21:20 #10
Jeg har stadig en forudsætning om at en kategorui enten har artikler
eller kategorier under sig men ikke begge dele.

tblCategories
-------------
CategoryID
CategoryName

tblArticleCategoryLink
---------------------
ArticleID
CategoryID

tblCategoryStructure
--------------------
ParentCategory
ChildCategory

Brugeren vil finde alle artikler i kategori X.

Pseudo-kode:

// find nummer i kategori
X# = SELECT CategoryID FROM tblCategories WHERE CategoryName=X

// find underkategorier
array xs = SELECT ChildCategory FROM tblCategoryStructure WHERE ParentCategory=X#

// test om der er underkategorier
if elements(xs)==0 then

    // find artikler
    array as = SELECT ArticleID FROM tblArticleCategoryLink WHERE CategoryID=X#

else

    // find artikler
    array as = SELECT ArticleID FROM tblArticleCategoryLink WHERE CategoryID IN (SELECT ChildCategory FROM tblCategoryStructure WHERE ParentCatelofy = X#)

endif

// process liste med artikler
Avatar billede arne_v Ekspert
10. april 2003 - 21:24 #11
Hm.

Ovenstående håndterer faktisk kun sitautionen, hvor man har enten laveste
kategori eller næst-laveste kategori.

Men jeg håber du kan se hvilken retning jeg går.

Det drejer sig meget om at flytte logik fra SQL til applikationen
(VB/ASP/PHP/whatever).

Man kan stort set alt i SQL.

Men det er ikke altid optimalt at gøre tingene i SQL.
Avatar billede somaliomar Praktikant
10. april 2003 - 21:49 #12
arne_v >> Jeg leger lige lidt med dit eksempel og vender tilbage i morgen. Tak for din tid indtil videre :)
Avatar billede _darkstar_ Nybegynder
10. april 2003 - 23:41 #13
arne_v>>> Dit forslag holder altså ikke. Nu har du overbevist somaliomar om at han skal have et net frem for et træ. Ideen med at benytte parent i selve kategoritabellen er klart den mest rationelle. Det andet giver redundans og kan føre til løkker i kategoristrukturen, som man skal tage specielt højde for. Til gengæld er der intet vundet ved den.

Tilbage til det oprindelige forslag - det fungerer helt fint.
Avatar billede _darkstar_ Nybegynder
10. april 2003 - 23:49 #14
Hvis performance bliver et problem, kan man efterfølgende lave nogle tricks med at hælde afslutninger i en separat tabel som netop svarer til arnes. F. eks.:

minekategorier
id | forælder | navn
---+----------+------
1 |    NULL | Gnavere
2 |        1 | Hamstre
3 |        1 | Mus
4 |    NULL | Fugle
5 |        4 | Med svømmefødder
6 |        5 | Ænder
7 |        5 | Lappedykkere

afslutning
id | forfader
---+----------
1 |    NULL
2 |        1
3 |        1
4 |    NULL
5 |        4
6 |        5
6 |        4
7 |        5
7 |        4

Med ovenstående tabel kan man få alle forældre til en given kategori ud med en enkelt forespørgsel. Man kan også få alle børn til en given kategori. Ulempen er at man skal vedligeholde den separat, men det er efter min mening klart den bedste løsning.
Avatar billede arne_v Ekspert
11. april 2003 - 07:23 #15
darkstar>

Du kan ikke lide min løsning og mener ikke at den giver noget.

Skriver du ikke lige den SELECT statement der finder artiklerne
der hører til en give kategori så ?

:-)

[og husk det kan være en kategori med unde-kategorier]
Avatar billede arne_v Ekspert
11. april 2003 - 07:27 #16
Til gengæld har du løst mit problem med multiple niveauer
med afslutning tabel.

Fordi I din ekstra tabel vil man kunne finde alle childs
i multiple niveauer ikke kun direkte childs og det er lige
sagen for min SELECT WHERE IN.
Avatar billede somaliomar Praktikant
11. april 2003 - 07:36 #17
Godmorgen

Jeg har besluttet mig for at anvende erikjacobsen's forslag, som hidtil er det bedste, hvis der ikke er flere løsninger på problemet. Men jeg lader lige spørgsmållet stå åben lidt endnu.
Avatar billede arne_v Ekspert
11. april 2003 - 07:48 #18
Hvordan vil du finde alle artikler om f.eks. Styresystemer ?
Avatar billede erikjacobsen Ekspert
11. april 2003 - 09:46 #19
alle artikler om styresystemer? I mit forslag er der også en unik
id pr. linie (nemmere end at referere til fx 1.1.2, hvis man en dag
laver om i rækkefølgen).

Så skal man bare "select .. from kategorier where type like '1.%'"
(man skal nok kalde kategoriernbe 1.0 1.1.0 osv) - og det resultat bruger
man til at finde artiklerne i deres database).

Sortering kan ikke umiddelbart foregå i kategorilisten - det kan ske i
programmeringssproget, eller hvis man laver det 001.001.003 i stedet for
(hvilket dog sætter en øvre grænse for antal kategorier på et givet niveau).

Men det er bare et udkast inspireret af et system jeg engang havde fingrene
dybt nede i - der er fordele og ulemper...
Avatar billede _darkstar_ Nybegynder
11. april 2003 - 10:28 #20
arne_v>>> Du spørger til et select-statement som henter alle artikler for en given kategori med underkategorier? Det er et join imellem min afslutningstabel og tabellen med artikler. Hvis du vil have et konkret eksempel, så sig til.

Iøvrigt er eriks idé også fin, men der kommer nogle sjove problemer hvis man gerne vil flytte en underkategori fra et sted i kategoritræet til et andet.
Avatar billede arne_v Ekspert
11. april 2003 - 10:45 #21
darkstar>

Hvis du bruger din afslutnings-tabel, så er din løsning jo stort set
identisk med min.

Jeg fik det indtryk af din kommentar, at du mente at man sagtens kunne
lave det 100% relationelt kun med parent kolonnen.

Det kan men vel også. Med en UNION af 0..N self JOIN's. Men det bliver
en søslange af dimensioner.
Avatar billede nih Novice
11. april 2003 - 11:53 #22
Hvis du vælger at bruge løsningen med parent kolonen skal du bruge en rekusiv funktion til at få nieauerne på plads. Det er nemmere end SQL

SQL kan du bruge til at hente artiklerne udfra id et i nodetabellen
Forslag:

  nodetabel: nodeID, parentId, MotherID, KategoriNavn, sortering

  Artikeltabel: nodeID, Artikel

Niels
Avatar billede nih Novice
11. april 2003 - 11:54 #23
motherId svarer til darkstar's forfader
Avatar billede _darkstar_ Nybegynder
11. april 2003 - 13:01 #24
nih>>> Jeg kan ikke helt se hvordan dit forslag kan opfylde f. eks. 4. normalform?

arne_v>>> ved nærmere eftertanke har vi vidst stort set fundet samme løsning. Undskyld hvis jeg hang dig ud. Jeg synes dog at det er vigtigt at man har et parent-felt i kategori-tabellen, som så benyttes som de "primære data". Afslutningstabellen skal blot ses som et hjælpemiddel.

Hvis kun benytter afslutningstabellen (som primær datakilde) kan man komme til at indsætte værdier som laver løkker i strukturen og det vil i mange tilfælde være fatalt.
Avatar billede _darkstar_ Nybegynder
11. april 2003 - 13:02 #25
Iøvrigt findes der databasesystemer som understøtter rekursive select-forespørgseler. F. eks. Oracle 7.2 og op.
Avatar billede arne_v Ekspert
11. april 2003 - 13:52 #26
darkstar>

OK.
Avatar billede somaliomar Praktikant
11. april 2003 - 16:08 #27
Nu har jeg fået nogle brand-gode inputs, som jeg kan arbejde videre med. Jeg går i tænkeboksen igen og ser om jeg selv kan føje noget til jeres forslag. Jeg vender tilbage, når jeg har fundet en løsning der passer mig bedst.
Avatar billede somaliomar Praktikant
11. april 2003 - 19:12 #28
Nu tror jeg, at jeg har fundet en løsning på problemet. Hvis min tabel ser sådan ud skulle alle mine problemer være løst:

tblCategories
-------------
ID      CatTree            CategoryName
1      1                    Styresystemer
2      1.2.2                Microsoft Windows
3      1.2.3                Windows 2000 Professional
4      1.2.4                Windows XP Home
5      1.2.5                Windows XP Professional
6      6                    Scripting
7      6.7                  Server-Side
8      6.7.8                ASP
9      6.9                  Client-Side
10    6.9.10              JavaScript
11    6.9.11              VBScript
12    1.2.12              Windows 98 Second Edition
13    1.2.13              Windows 95
14    6.7.14              JSP
15    6.7.15              ColdFusion


Hvad siger I? Kan I finde begrænsninger i den måde jeg registere kategorierne på?
Avatar billede arne_v Ekspert
11. april 2003 - 19:29 #29
Du skal nok lige overveje søgning på CatTree - jævnfør Eriks
09:46:07 kommentar.

Det skal helst være nemt at lave en LIKE på CatTree.
Avatar billede somaliomar Praktikant
11. april 2003 - 19:32 #30
Det er da nemt at lave en LIKE-søgning på CatTree:

SELECT CategoryName FROM tblCategories WHERE CatTree Like '6.9.%'

Er det det du mener?
Avatar billede arne_v Ekspert
11. april 2003 - 19:35 #31
Ja.

Men hvordan laver du en søgning på alle 1'ere uden at få 11'ere med ?
Avatar billede arne_v Ekspert
11. april 2003 - 19:36 #32
Hvis man klistrer .0 eller bare . på, så kan bruge LIKE 1.%
og undgå 11'ere (sådan læste jeg ihvertfald Eriks kommentar).
Avatar billede somaliomar Praktikant
11. april 2003 - 19:39 #33
En søgning på 1'ere uden at få 11'ere med:

SELECT CategoryName FROM tblCategories WHERE CatTree Like '1.%'
Avatar billede somaliomar Praktikant
11. april 2003 - 19:42 #34
Hehehe... Nu kan jeg se hvad du mener. Hvad så hvis jeg laver det sådan her:

ID      CatTree            CategoryName
1      1.                    Styresystemer
2      1.2.2.                Microsoft Windows
3      1.2.3.                Windows 2000 Professional
4      1.2.4.                Windows XP Home
5      1.2.5.                Windows XP Professional
6      6.                    Scripting
7      6.7.                  Server-Side
8      6.7.8.                ASP
9      6.9.                  Client-Side
10    6.9.10.              JavaScript
11    6.9.11.              VBScript
12    1.2.12.              Windows 98 Second Edition
13    1.2.13.              Windows 95
14    6.7.14.              JSP
15    6.7.15.              ColdFusion
Avatar billede arne_v Ekspert
11. april 2003 - 19:51 #35
Det virker OK i mange tilfælde.

Men husk på at 1 ikke er LIKE '1.%'.
Avatar billede arne_v Ekspert
11. april 2003 - 19:51 #36
Yes.

Nu vil LIKE '1.%' fange hvad man "forventer".
Avatar billede _darkstar_ Nybegynder
11. april 2003 - 20:02 #37
somaliomar>>> Husk lige at flytning af kategorier er en større udfordring før at du vælger ovenstående løsning...
Avatar billede somaliomar Praktikant
11. april 2003 - 21:15 #38
_darkstar_ >> Jeg kan ikke lige se, hvordan det skulle være svært at flytte en kategori til et andet sted i hierakiet. Hvis jeg f.eks. skal flytte kategorien "Windows 2000 Professional" til toppen i hierakiet, skal jeg ændre CatTree-værdien til "3."
Avatar billede arne_v Ekspert
11. april 2003 - 21:18 #39
Jeg tror at han mener, at hvis du vil flytte Server-Side-Scripting fra
6.7 til 16, så skal ASP ændres fra 6.7.8 til 16.8 !

Ikke så svært i en applikation. Meget svært i SQL.
Avatar billede nih Novice
11. april 2003 - 22:42 #40
Jeg mener stadig at min løsning er de mes optimale.

Jeg har en stump kode her der loader et træ vha en recursiv procedure (VBA)

Sub test()
    Call udskrivtrae(0, 0)
End Sub
Sub udskrivtrae(sId, level)

    Dim rs As Object
    Dim sql

    If IsNull(sId) Then
        Exit Sub
    End If

    sql = "select * from tblNode where parrentid=" & sId & " ORDER by sortering"
    Set rs = CurrentDb().OpenRecordset(sql)
   
    Do While Not rs.EOF
     
        If level = 0 Then
            Debug.Print rs("title")
        Else
            Debug.Print Space(level) & "  " & rs("title")
        End If
        Call udskrivtrae(rs("nodeid"), level + 1)
        rs.MoveNext
    Loop
   
    If Not rs Is Nothing Then
        rs.Close
    End If
    Set rs = Nothing
End Sub

Niels
Avatar billede _darkstar_ Nybegynder
11. april 2003 - 23:01 #41
arne_v + somaliomar>>> Faktisk kan det blive meget værre.

Hvis du opdager at du gerne vil flytte hele kategorien "Client-Side" fra "Scripting" til "Styresystemer", så er der ballade.

ID      CatTree            CategoryName
9      6.9.  -> 1.3                Client-Side
10    6.9.10. -> 1.3.1              JavaScript
11    6.9.11. -> 1.3.2              VBScript
12    1.2.12. -> 1.3.3              Windows 98 Second Edition
...

Nu skriver du jo også at f. eks. JavaScript som er den første underkategori under Client-Side har nummeret 10 (6.9.>10<) - det kan også give dig nogle spændende udfordringer at holde regnskab med hvilke tal, der er optaget.

Jeg synes stadgivæk at løsningen er god nok, men man skal altså være opmærksom på at man kommer til at skrive en del ekstra "bogholderi"-kode efterfølgende.
Avatar billede _darkstar_ Nybegynder
11. april 2003 - 23:05 #42
nih>>> Det ville belyse din idé væsentligt bedre hvis du kunne komme med et udkast til hvad dine tabeller kunne indeholde. Jeg kan stadigvæk ikke se hvordan man kan få noget meningsfuldt ud af en tabel med både et "parent" og et "mother"-felt. Hvis du ser på min afslutningetabel er der jo ikke noget 1-1 forhold til kategorierne. Det ser det ud til at du antager at der er og det er et problem.
Avatar billede nih Novice
11. april 2003 - 23:17 #43
Den motherId er egentligt et beregnet felt der skal vedligeholdes og som du siger ikke godt for normaliseringen - men for performance (glem den til du for problemmer med load tider.)

Det kræver også diciplin at 'noder' ikke bliver væk - altså har en parentID der ikke eksistere som nodeid.

nIELS
Avatar billede nih Novice
11. april 2003 - 23:19 #44
Det er faktisk det samme som din :)
Avatar billede _darkstar_ Nybegynder
11. april 2003 - 23:42 #45
nih>>> Hvis du kigger på rækken med id 13 i somaliomars eksempel ovenfor, hvad for værdi skal motherid-feltet så have der?
Avatar billede nih Novice
11. april 2003 - 23:48 #46
Sorry - nu kan jeg se hvad du mener

Mothernodeid - som jeg bruger det referer til den første node i træet.
Så kan man 'nøjes' med at loade 'rootnoderne' først og loade childnoderne når brugeren klikker på træet.

node  parrent    mother    title
1      0          1        rod1
2      1          1        child1
3      2          1        child11
4      0          4        rod2
5      4          4        child2


Den anvendes først når brugeren klikker på en af rodNoderne, pga performance

Niels
Avatar billede nih Novice
12. april 2003 - 00:06 #47
nr 1 - 2 - 3 - 4 - 5 - 12 - 13 skal alle have motherId = 1 fordi deres root hedder 1

Niels
Avatar billede _darkstar_ Nybegynder
12. april 2003 - 00:41 #48
nih>>>Hvordan skriver man så en select-sætning som henter alle artikler i kategorien Client-Side ud (inklusive artikler fra underkategorier)?
Avatar billede henrik13 Nybegynder
12. april 2003 - 01:37 #49
Hej.
Skal der være mere end 9 hoved kataloger, og 9 Underkateloger.
jeg arbejder med sådan et exempel, til mig selv.
Vh Henrik
Avatar billede nih Novice
12. april 2003 - 09:04 #50
SELECT tblNode.Title, tblNode_1.Title, tblNode_2.Title
FROM (tblNode LEFT JOIN tblNode AS tblNode_1 ON tblNode.Nodeid = tblNode_1.parrentId) LEFT JOIN tblNode AS tblNode_2 ON tblNode_1.Nodeid = tblNode_2.parrentId
WHERE tblNode.Title Client-Side

Udskriver 2 niveauer under clientside
Avatar billede nih Novice
12. april 2003 - 09:05 #51
Where tblNode.nodeid =" & denNodederErKlikketPå
Avatar billede _darkstar_ Nybegynder
12. april 2003 - 11:32 #52
nih>>> ...men din løsning virker så ikke med vilkårligt mange niveauer - det gør arne_v's og min. Desuden kan jeg ikke se at du bruger motherID til noget.
Avatar billede somaliomar Praktikant
12. april 2003 - 12:46 #53
_darkstar_ >> Jeg tror ikke, at du helt har forstået, hvad det er jeg registrerer i feltet CatTree. Sådan ser skabelonen ud:

  ParentCatID.ParentCatID.ParentCatID...CatID.

Når f.eks. kategorien "JavaScript" har CatTree-værdien "6.9.10." betyder det:

"6." = kategorien hører ind under "Scripting" som har ID-nummeret 6
"9." = kategorien hører ind under "Client-Side" som har ID-nummeret 9
"10." = selve kategorien som har ID-nummeret 10


Hvis jeg nu tager dit eksempel og skal flytte hele kategorien "Client-Side" fra "Scripting" til "Styresystemer" gør sådan her:

ID      CatTree                    CategoryName
9        6.9. -> 1.9.              Client-Side
10      6.9.10. -> 1.9.10        JavaScript
11      6.9.11. -> 1.9.11        VBScript
Avatar billede somaliomar Praktikant
12. april 2003 - 12:50 #54
henrik13 >> Ja, der skal være mere end 9 hoved-kategorier og 9 underkategorier.
Avatar billede arne_v Ekspert
12. april 2003 - 12:51 #55
Det er heller ikke helt nemt at lave automatisk.

Men jeg er helle rikke så bekymret for det. Fordi mit gæt er
at antallet af kategorier vil være så lille og antallet af struktur
ændringer så sjældne at:
  - db offline
  - backup
  - manuelle SQL UPDATE statements
  - db online
er OK.

Hvis der var hundretusinder af kategorier og det skulle være
nemt at ændre struktur, så ville det kræve lidt kode.
Avatar billede _darkstar_ Nybegynder
12. april 2003 - 15:06 #56
somaliomar>>>> Jeg er helt med. Det er stadigvæk noget pilleri, som kunne gøres med en update af blot én række (og efterfølgende opdatering af afslutningstabellen) hvis man benytter den løsning som arne og jeg har foreslået.

jeg synes alligevel at det er en god løsning. Det eneste som jeg skriver er, at du skal være opmærksom på at man skal skrive noget kode som kan udføre den slags operationer.
Avatar billede somaliomar Praktikant
12. april 2003 - 15:35 #57
_darkstar_ >> Der er fordele og ulemper i Erikjacobsens og jeres forslag. Jeg foretrækker nu Erikjacobsens forslag, da jeg synes at metoden er simpel og overskueligt.

nih, darkstar, arne_v, erikjacobsen >> Gider I lige smide jeres svar. Jeg lukker spørgsmålet nu. Jeg takker mange gange for de gode inputs og ikke mindst jeres tid. Jeg er blevet meget klogere :D
Avatar billede arne_v Ekspert
12. april 2003 - 15:37 #58
ok
Avatar billede _darkstar_ Nybegynder
12. april 2003 - 16:32 #59
Ditto. Jeg har iøvrigt også flere gange skrevet at jeg synes at Eriks forslag er udemærket - så det er et ok valg.
Avatar billede nih Novice
13. april 2003 - 09:09 #60
Jeg behøves ikke point. Desuden har du åbenbart ikke valgt min løsning.

Jeg har dog en telefonliste, hvor fimaets afdelinger er vist i et treeview på den måde jeg har beskevet - og den kan indeholde uendeligt niveauer og rootnoder.
Hvis du f.eks pludselig vil flytte en node skal du ændre alle de underliggende catTree værdier, hvor jeg kan nøjes med at ændre ParentNode.

Niels
Avatar billede somaliomar Praktikant
13. april 2003 - 09:20 #61
nih >> Det er rigtigt. Men at give dig nogle points er da det mindste jeg kan gøre som tak for dit bidrag. Siger du nej til det, er det bare helt i orden :)

erikjacobsen >> Jeg går ud fra, at du ikke skal have nogle points!??
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester