Delphi-PRAXiS
Seite 6 von 9   « Erste     456 78     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Performance verbessern (https://www.delphipraxis.net/82215-performance-verbessern.html)

Luncustaf 11. Dez 2006 17:28

Re: Performance verbessern
 
hi,

danke für die tipps - habe es vllt etwas umständlich ausgedrückt - das kname,uname und rname bezieht sich nicht auf die namen in der einzelnen tabellen sondern schon auf die id deswegen sind diese als integer angelegt.

wie läuft das mit der rekursiven tabelle?
Delphi-Quellcode:
ID=1
KAT_ID=1
iPos=0
Name=Fleisch //eine hauptkategorie

ID=2
Kat_ID=1
iPos=1
Name=Hackfleisch //eine unterkategorie von Fleisch

ID=3
Kat_ID=1
iPos=2
Name=Schwein //eine unterkategorie von Fleisch

ID=4
Kat_ID=2
iPos=0
Name=Auflauf & Gratin //eine hauptkategorie

ID=5
Kat_ID=2
iPos=1
Name=Kartoffelgratin //eine unterkategorie von Auflauf & Gratin
sehe ich das so richtig?

marabu 11. Dez 2006 17:34

Re: Performance verbessern
 
Besser so:

Code:
ID  KAT_ID  IPOS  NAME
 1     NULL     0   Fleisch
 2        1      0   Hackfleisch
 3        1      1   Schwein
 ...
Das mit den Schlüsseln in deinen DDL Statements habe ich übersehen - entschuldige bitte.

Freundliche Grüße

Luncustaf 11. Dez 2006 17:41

Re: Performance verbessern
 
Zitat:

Zitat von marabu
Besser so:

Code:
ID  KAT_ID  IPOS  NAME
 1     NULL     0   Fleisch
 2        1      0   Hackfleisch
 3        1      1   Schwein
 ...
Das mit den Schlüsseln in deinen DDL Statements habe ich übersehen - entschuldige bitte.

Freundliche Grüße

und wie weiß ich nun das Hackfleisch zu der Kategorie Fleisch gehört?
durch die KAT_ID weise ich der unterkategorie die hauptkategorie zu oder nicht?

gruß

marabu 11. Dez 2006 17:48

Re: Performance verbessern
 
Das hast du richtig erkannt - und damit ist eine wertmäßige Verknüpfung hergestellt, die später in einem JOIN der Tabelle mit sich selbst verwendet werden kann.

Luncustaf 11. Dez 2006 22:32

Re: Performance verbessern
 
hi marabu,

so ich hab nun mein programm nochmal von vorne angefangen mit der tabellenstruktur von dir - die ich nachdem ich mich damit beschäftigt habe einleuchtend finde. nun habe ich aber doch ein paar kleinere verständnis probleme im bezug von rezepte speichern.

ich bin nun soweit das ich alles eingetragen habe und das rezept speichern will.
ich habe als beispiel die hauptkategorie 'Fleisch' ausgewählt und als Unterkategorie 'Hackfleisch'
wie bekomme ich nun raus welche KAT_ID die kategorie Fleisch hat um diese in die rezept tabelle zu speichern?

desweiteren glaube ich das du einen kleinen fehler in der struktur hast, da man meiner bescheidenen meinung nach in die tabelle rezepte auch noch das feld 'ipos' aus der tabelle kategorien einbringen müsste damit ich ein rezept auch der dazugehörigen unterkategorie zuweisen kann.

wenn ich falsch liege sag es bitte - ich hab durch diesen thread schon viel gelernt und ich möchte nicht aufhören damit ;)
ich habe mir schon verschieden sql-referenzen im netz angeschaut und auch schon mit INNER und OUTER JOIN rumgespielt in mysqlfront.
werde ich zum angebrachten zeitpunkt vertiefen.

danke nochmals für die hilfe von allen

gruß

mkinzler 12. Dez 2006 05:11

Re: Performance verbessern
 
Zitat:

ich habe als beispiel die hauptkategorie 'Fleisch' ausgewählt und als Unterkategorie 'Hackfleisch'
wie bekomme ich nun raus welche KAT_ID die kategorie Fleisch hat um diese in die rezept tabelle zu speichern?
In diesem fall ist ja nicht die ID von Fleisch sondern die von Hackfleisch interessant. Diese könnte man mit
SQL-Code:
select KAT_ID from Kategorien where Name = 'Hackfleisch';
ermitteln

marabu 12. Dez 2006 06:16

Re: Performance verbessern
 
Guten Morgen,

Zitat:

Zitat von Luncustaf
ich bin nun soweit das ich alles eingetragen habe und das rezept speichern will.
ich habe als beispiel die hauptkategorie 'Fleisch' ausgewählt und als Unterkategorie 'Hackfleisch'
wie bekomme ich nun raus welche KAT_ID die kategorie Fleisch hat um diese in die rezept tabelle zu speichern?

eingetragen wird - wie Markus schon geschrieben hat - die ID der Unterkategorie, da in deiner zweistufigen Gliederung Zuordnungen stets nur auf der Ebene der Unterkategorien statt finden. Die Beziehung zwischen Unterkategorie und Kategorie wird nicht in den Rezepten, sondern in der Tabelle Kategorien gepflegt. Dort verweist KAT_ID auf die Kategorie. Ist KAT_ID = NULL so handelt es sich um eine Kategorie und keine Unterkategorie.

Zitat:

Zitat von Luncustaf
desweiteren glaube ich das du einen kleinen fehler in der struktur hast, da man meiner bescheidenen meinung nach in die tabelle rezepte auch noch das feld 'ipos' aus der tabelle kategorien einbringen müsste damit ich ein rezept auch der dazugehörigen unterkategorie zuweisen kann.

ID ist der Primärschlüssel von Kategorien. Die beiden Felder (KAT_ID, iPos) stellen einen sogenannten Schlüsselkandidaten dar, weil sie für sich genommen einen Eintrag der Tabelle identifizieren können. Du benutzt diesen candidate key später aber nur für Sortierzwecke (ORDER BY).

Freundliche Grüße

Luncustaf 12. Dez 2006 07:10

Re: Performance verbessern
 
Zitat:

Zitat von mkinzler
Zitat:

ich habe als beispiel die hauptkategorie 'Fleisch' ausgewählt und als Unterkategorie 'Hackfleisch'
wie bekomme ich nun raus welche KAT_ID die kategorie Fleisch hat um diese in die rezept tabelle zu speichern?
In diesem fall ist ja nicht die ID von Fleisch sondern die von Hackfleisch interessant. Diese könnte man mit
SQL-Code:
select KAT_ID from Kategorien where Name = 'Hackfleisch';
ermitteln

hmm das ist mir soweit schon klar - nur wie kann ich bestimmen das 'Hackfleisch' eine Unterkategorie von Fleisch ist - wenn ich später die TreeView lade dann soll diese ja als Child unter Fleisch stehen?


Zitat:

Zitat von marabu
Guten Morgen,

Zitat:

Zitat von Luncustaf
ich bin nun soweit das ich alles eingetragen habe und das rezept speichern will.
ich habe als beispiel die hauptkategorie 'Fleisch' ausgewählt und als Unterkategorie 'Hackfleisch'
wie bekomme ich nun raus welche KAT_ID die kategorie Fleisch hat um diese in die rezept tabelle zu speichern?

eingetragen wird - wie Markus schon geschrieben hat - die ID der Unterkategorie, da in deiner zweistufigen Gliederung Zuordnungen stets nur auf der Ebene der Unterkategorien statt finden. Die Beziehung zwischen Unterkategorie und Kategorie wird nicht in den Rezepten, sondern in der Tabelle Kategorien gepflegt. Dort verweist KAT_ID auf die Kategorie. Ist KAT_ID = NULL so handelt es sich um eine Kategorie und keine Unterkategorie.

wenn KAT_ID NULL ist ist es eine Hauptkategorie soweit so gut d.h. ich nehme iPos um die Unterkategorie der Hauptkategorie zuzuordnen? irgendwo muss dort doch eine beziehung bestehen.

Delphi-Quellcode:
ID  KAT_ID  IPOS  NAME
1     NULL     0   Fleisch
2        1      0   Hackfleisch
3        1      1   Schwein
...
In diesem beispiel hier sehen ich keine beziehung zwischen der kategorie und der unterkategorie -> evtl so?

Delphi-Quellcode:
ID  KAT_ID  IPOS  NAME
1     NULL     0   Fleisch
2        1      0   Hackfleisch
3        [b]2[/b]     [b]0[/b]  Schwein
...
bei mir hätte die zweite hauptkategorie zb auflauf dann bei iPos die zahl 1 usw...
oder steh ich irgendwie komplett auf dem schlauch und seh den wald vor lauter bäumen nicht?
Zitat:

Zitat von marabu
Zitat:

Zitat von Luncustaf
desweiteren glaube ich das du einen kleinen fehler in der struktur hast, da man meiner bescheidenen meinung nach in die tabelle rezepte auch noch das feld 'ipos' aus der tabelle kategorien einbringen müsste damit ich ein rezept auch der dazugehörigen unterkategorie zuweisen kann.

ID ist der Primärschlüssel von Kategorien. Die beiden Felder (KAT_ID, iPos) stellen einen sogenannten Schlüsselkandidaten dar, weil sie für sich genommen einen Eintrag der Tabelle identifizieren können. Du benutzt diesen candidate key später aber nur für Sortierzwecke (ORDER BY).

Freundliche Grüße

darauf komme ich später nochmal zurück - das will mir irgendwie auch noch nicht richtig in den schädel :)

danke weiterhin für eure hilfe und geduld.

gruß

marabu 12. Dez 2006 08:17

Re: Performance verbessern
 
Hi,

Zitat:

Zitat von Luncustaf
In diesem beispiel hier sehen ich keine beziehung zwischen der kategorie und der unterkategorie

mit KAT_ID = 1 wird Hackfleisch als Unterkategorie von Fleisch festgelegt. Für die ersten drei Kategorien sieht das dann so aus:

Code:
ID,KAT_ID,IPOS,NAME
1,NULL,0,"Eier- & Mehlspeisen"
2,NULL,1,"Auflauf & Co."
3,NULL,2,"Fleisch"
...
22,1,0,"Crêpes"
24,1,1,"Deftiges & Delikates"
25,1,2,"Omelettes"
26,1,3,"Pfannkuchen"
27,1,4,"Sonstiges"
28,2,0,"Sonstiges"
29,2,1,"Gratins"
30,2,2,"Aufläufe"
31,2,3,"Soufflès"
32,3,0,"Hackfleisch"
33,3,1,"Kalb"
34,3,2,"Lamm & Hammel"
35,3,3,"Rind"
36,3,4,"Schwein"
37,3,5,"Sonstiges & Delikatessen"
Das Feld IPOS regelt die Anzeige-Reihenfolge der Unterkategorien in der jewiligen Hauptkategorie, aber auch die Ordnung der Hauptkategorien. Um deine (Unter)Kategorien in einer TreeView anzeigen zu können brauchst du dann einen LEFT OUTER JOIN. Ein einziges Statement liefert dir deine Daten in genau der Reihenfolge, die du für die Anzeige brauchst:

SQL-Code:
SELECT U.* 
FROM Kategorien U
LEFT OUTER JOIN Kategorien K ON K.ID = U.KAT_ID
ORDER BY K.iPos, U.iPos
Hoffentlich habe ich nicht zu viele Fehler eingebaut.

Freundliche Grüße

Luncustaf 12. Dez 2006 08:22

Re: Performance verbessern
 
hi,

danke für deine unendlich geduld :)
nun habs glaube ich auch ich verstanden.
muss ich dann beim speichern eines rezeptes erst einmal abfragen welche id meine jeweilige kategorie und unterkategorie hat bevor ich mit meiner zeos table das ganze wegspeichern kann?
sehe ich das richtig?

gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:53 Uhr.
Seite 6 von 9   « Erste     456 78     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz