AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Performance verbessern
Thema durchsuchen
Ansicht
Themen-Optionen

Performance verbessern

Ein Thema von Luncustaf · begonnen am 8. Dez 2006 · letzter Beitrag vom 7. Jan 2007
Antwort Antwort
Seite 6 von 9   « Erste     456 78     Letzte »    
Luncustaf

Registriert seit: 31. Jan 2003
80 Beiträge
 
Delphi 6 Enterprise
 
#51

Re: Performance verbessern

  Alt 11. Dez 2006, 17:28
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?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#52

Re: Performance verbessern

  Alt 11. Dez 2006, 17:34
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
  Mit Zitat antworten Zitat
Luncustaf

Registriert seit: 31. Jan 2003
80 Beiträge
 
Delphi 6 Enterprise
 
#53

Re: Performance verbessern

  Alt 11. Dez 2006, 17:41
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ß
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#54

Re: Performance verbessern

  Alt 11. Dez 2006, 17:48
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.
  Mit Zitat antworten Zitat
Luncustaf

Registriert seit: 31. Jan 2003
80 Beiträge
 
Delphi 6 Enterprise
 
#55

Re: Performance verbessern

  Alt 11. Dez 2006, 22:32
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ß
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#56

Re: Performance verbessern

  Alt 12. Dez 2006, 05:11
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
select KAT_ID from Kategorien where Name = 'Hackfleisch'; ermitteln
Markus Kinzler
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#57

Re: Performance verbessern

  Alt 12. Dez 2006, 06:16
Guten Morgen,

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 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
  Mit Zitat antworten Zitat
Luncustaf

Registriert seit: 31. Jan 2003
80 Beiträge
 
Delphi 6 Enterprise
 
#58

Re: Performance verbessern

  Alt 12. Dez 2006, 07:10
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
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 von marabu:
Guten Morgen,

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 von marabu:
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ß
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#59

Re: Performance verbessern

  Alt 12. Dez 2006, 08:17
Hi,

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
  Mit Zitat antworten Zitat
Luncustaf

Registriert seit: 31. Jan 2003
80 Beiträge
 
Delphi 6 Enterprise
 
#60

Re: Performance verbessern

  Alt 12. Dez 2006, 08:22
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ß
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 6 von 9   « Erste     456 78     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz