AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL: Set of Integer?
Thema durchsuchen
Ansicht
Themen-Optionen

SQL: Set of Integer?

Ein Thema von fkerber · begonnen am 26. Mai 2006 · letzter Beitrag vom 27. Mai 2006
Antwort Antwort
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#1

SQL: Set of Integer?

  Alt 26. Mai 2006, 16:23
Datenbank: Absolute Database • Zugriff über: native
Hi!

Ich habe folgendes vor und suche nach einer Möglichkeit, dass in einer DB umzusetzen:
Ich habe verschiedene Gruppen, z.B. Häuser (ID = 0), Brücken (ID = 1), Bäume (ID = 2), Sträucher (ID = 3) etc.

Jetzt soll es eine Foto-DB geben und ein Foto kann eben zu mehreren Gruppen gehören. Ein Foto kann also bspw. eine Brücke und einen Baum zeigen. Jetzt war mein erster Gedanke, ich hab ein String-Feld in der DB, das dann z.B. so aussieht:

Zitat:
1,2
Irgendwie erscheint mir das aber nicht sinnvoll, zumal die SQL-Abfrage wohl ziemlich kompliziert ist.


Wie löst man sowas denn effizient?


Ciao Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Flare

Registriert seit: 26. Jan 2006
Ort: Leipzig
529 Beiträge
 
Delphi 7 Professional
 
#2

Re: SQL: Set of Integer?

  Alt 26. Mai 2006, 16:26
Vielleicht mit Bitoperationen und nem Integer...
Mein Vorschlag


Flare
Willy Scheibel
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#3

Re: SQL: Set of Integer?

  Alt 26. Mai 2006, 16:27
Hi!

Könntest du das etwas näher ausführen?


Ciao Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Flare

Registriert seit: 26. Jan 2006
Ort: Leipzig
529 Beiträge
 
Delphi 7 Professional
 
#4

Re: SQL: Set of Integer?

  Alt 26. Mai 2006, 16:37
Delphi-Quellcode:
const
 Baum = 1;
 Strauch = 2;
 Brücke = 4;

...

if (Eigenschaften and Baum)=Baum then ... //Baum ist auf dem Bild
if (Eigenschaften and Strauch)=Strauch then ... //Baum ist auf dem Bild

...
Und das speichern geht dann etwa so
Delphi-Quellcode:
Eigenschaften := 0;
if Baum_auf_Bild then Eigenschaften := Eigenschaften or Baum;
if Strauch_auf_Bild then Eigenschaften := Eigenschaften or Strauch;
...
So stell ich mir das vor.


Flare
Willy Scheibel
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#5

Re: SQL: Set of Integer?

  Alt 26. Mai 2006, 16:43
Hi!

Das würde aber bedeuten, dass die IDs Zweierpotenzen sind, oder?


Ciao Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Flare

Registriert seit: 26. Jan 2006
Ort: Leipzig
529 Beiträge
 
Delphi 7 Professional
 
#6

Re: SQL: Set of Integer?

  Alt 26. Mai 2006, 16:44
Ja, würde es
Das wirft dich dann vielleicht in deiner Planung ein bisschen um, aber ich denke diese Methode ist relativ platzsparend...


Flare
Willy Scheibel
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: SQL: Set of Integer?

  Alt 26. Mai 2006, 16:52
Das widerspricht aber dem SQL-Gedanken... Besser ist sowas hier:

Die Tabelle Bilder hat eine ID.
Die Tabelle Bildattribute hat zwei Felder: ID und Attribut.

Alle Attribute eines Bildes mit der ID 12345 bekommst Du mit
Select Attribut from BildAttribute where ID = 12345 Alle Bilder, die die Attribute 1,5,9,20 und 12435764 haben, bekommst Du mit
Select distinct ID from BildAttribute where Attribute in (1,5,9,20,12435764) Vorteile:
1.Wesentlich schneller (Wenn ein Index auf den Attributen sitzt)
2.SQL konform
3.Mehr als 32 Attribute sind möglich

Dann kannst Du dir noch eine Tabelle 'Attribute' bauen, die hat zwei Spalten:
Attribut, Beschreibung.

Somit hast du gleich die textuelle Repräsentation eines Bildattributes in der DB und kannst Dir mit einer einfach DBLookupCombo die Attributliste zusammenklicken.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#8

Re: SQL: Set of Integer?

  Alt 26. Mai 2006, 17:10
Hi!

Also ich brauche def. mehr als 32 Gruppen, also nix mit Bitoperatoren.

@alzaimar:
so ganz komm ich nicht mit..

Wie sähen denn die Tabellen und die Einträge aus, so?

Zitat:
Tabelle Bilder:

ID # Pfad
----------------------
0 # c:\asdasdasd.jpg
1 # c:\asdjadjkha.jpg

Zitat:
Tabelle Bildattribute

ID # Attribut
--------------------
0 # 10,50,67
1 # 46,56,67,10
Wäre das richtig? Welchen Typ hat denn das Feld Attribut?
Irgendwie komm ich nicht mit, sry


Ciao Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: SQL: Set of Integer?

  Alt 26. Mai 2006, 17:16
Mit konkreten Beispielen geht das immer sehr gut:

Tabelle Bildattribute

ID # Attribut
--------------------
0 # 10,50,67
1 # 46,56,67,10


So nicht, aber so:

ID Attribut
-----------
0 10
0 50
0 67
1 46
1 56
1 67
1 10

Bei einem Update, also wenn Du die Attribute verändern willst, löschst Du einfach alle Attribute der Bild ID und fügst hinterher alle ein. Das geht am einfachsten, wenn du dir ein SQL-Skript zusammenbastelst.

Nehmen wir an, Du willst dem Bild #1 jetzt die Attribute 5,7 und 9 verpassen. Dann sieht das Skript so aus:
SQL-Code:
Delete from BildAttribute Where ID = 1
insert into BildAttribute
  select 1,5 union
  select 1,7 union
  select 1,9
Denk dran, bei vielen Bildern ein Index auf die ID und einen Index auf das Attribut der Tabelle 'BildAttribute' zu legen. Dann geht das Eins-Fix-Drei!
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#10

Re: SQL: Set of Integer?

  Alt 27. Mai 2006, 11:51
Hi!

Super, danke für die Ausführungen!
Werde ich dann so umsetzen!

Danke


Ciao Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:05 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