![]() |
Datenbank: Absolute Database • Zugriff über: native
SQL: Set of Integer?
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:
Wie löst man sowas denn effizient? Ciao Frederic |
Re: SQL: Set of Integer?
Vielleicht mit Bitoperationen und nem Integer...
Mein Vorschlag :zwinker: Flare |
Re: SQL: Set of Integer?
Hi!
Könntest du das etwas näher ausführen? Ciao Frederic |
Re: SQL: Set of Integer?
Delphi-Quellcode:
Und das speichern geht dann etwa so
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 ...
Delphi-Quellcode:
So stell ich mir das vor.
Eigenschaften := 0;
if Baum_auf_Bild then Eigenschaften := Eigenschaften or Baum; if Strauch_auf_Bild then Eigenschaften := Eigenschaften or Strauch; ... Flare |
Re: SQL: Set of Integer?
Hi!
Das würde aber bedeuten, dass die IDs Zweierpotenzen sind, oder? Ciao Frederic |
Re: SQL: Set of Integer?
Ja, würde es :thumb:
Das wirft dich dann vielleicht in deiner Planung ein bisschen um, aber ich denke diese Methode ist relativ platzsparend... Flare |
Re: SQL: Set of Integer?
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
SQL-Code:
Alle Bilder, die die Attribute 1,5,9,20 und 12435764 haben, bekommst Du mit
Select Attribut from BildAttribute where ID = 12345
SQL-Code:
Vorteile:
Select distinct ID from BildAttribute where Attribute in (1,5,9,20,12435764)
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. |
Re: SQL: Set of Integer?
Hi!
Also ich brauche def. mehr als 32 Gruppen, also nix mit Bitoperatoren. :wink: @alzaimar: so ganz komm ich nicht mit.. Wie sähen denn die Tabellen und die Einträge aus, so? Zitat:
Zitat:
Irgendwie komm ich nicht mit, sry Ciao Frederic |
Re: SQL: Set of Integer?
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:
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!
Delete from BildAttribute Where ID = 1
insert into BildAttribute select 1,5 union select 1,7 union select 1,9 |
Re: SQL: Set of Integer?
Hi!
Super, danke für die Ausführungen! Werde ich dann so umsetzen! Danke :thumb: Ciao Frederic |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:12 Uhr. |
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