Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Vom zwei-dimensionalen ins ein-dimensionale... (https://www.delphipraxis.net/134502-vom-zwei-dimensionalen-ins-ein-dimensionale.html)

Mithrandir 23. Mai 2009 12:40


Vom zwei-dimensionalen ins ein-dimensionale...
 
Hi ihr,

so lange Firebird noch keine zwei-dimensionalen Indizes unterstützt (ist das überhaupt geplant?), muss ich zwei-dimensionale Werte in einen ein-dimensionalen Wert umwandeln. Nur wie erledigt man das am Besten, wenn man folgende Rahmenbedingungen hat:
  • Das Koordinatensystem hat als höchsten Wert (39136/39136), keine Nachkommastellen und keine negativen Werte
  • Es sollten von...bis Abfragen möglich sein. ("Gib mir alles von (3/4) bis (4/5)*")

Meine Idee wäre gewesen, einen ausreichend großen Datentyp (wohl Integer in diesem Falle) zu nehmen, und die X-Koordinaten z.B. in den oberen 2 Byte zu speichern und die Y-Koordinaten in den unteren 2 Byte.

Allerdings funktioniert dann Punkt 2 nicht mehr.

Hat jemand eine andere Idee?

*Die X und Y Werte sind mit anderen Eigenschaften verknüpft. Daher ist so eine Abfrage möglich. So stehen X und Y eigentlich nicht für Punkte, sondern für einen Bereich mit einer Größe von 512*512 Punkten.

Dax 23. Mai 2009 12:43

Re: Vom zwei-dimensionalen ins ein-dimensionale...
 
Reichen zwei eindimensionale Indizes denn nicht? Wenn Firebird nicht völlig auf Sand gebaut ist, werden die auch benuzt, wenn du ein Query absetzt, das die Indizes als Kandidaten hat.

mkinzler 23. Mai 2009 12:50

Re: Vom zwei-dimensionalen ins ein-dimensionale...
 
Was verstehst du unter einem 2 dimensionalem Index?

Mithrandir 23. Mai 2009 13:06

Re: Vom zwei-dimensionalen ins ein-dimensionale...
 
:gruebel: Ok, mag ja sein, dass ich das falsch verstehe, aber wenn ich einen Index anlege, dann kann ich mit dem doch recht flink auf eine bestimmte Zeile zugreifen. Allerdings muss ein Index doch immer eindeutig sein, oder? Es gibt ja (1/1), (1/2), (1/3)... Der X-Wert also immer derselbe...

@mkinzler: Naja, ein Index aus X- und Y-Werten. :stupid:

mkinzler 23. Mai 2009 13:11

Re: Vom zwei-dimensionalen ins ein-dimensionale...
 
Mit folgender Struktur

Code:
ID   X   Y   Wert
--------------------
1     1    1    2
2     1    2    1
3     1    3    3
4     2    1    1
...
Und einem Index über X und Y sollte das Problem doch händelbar sein?

Mithrandir 23. Mai 2009 13:33

Re: Vom zwei-dimensionalen ins ein-dimensionale...
 
:gruebel:

Code:
ID   X   Y   Wert
--------------------
1     1    1    2
2     1    2    1
3     1    3    3
4     1    4    1
5     2    1    3
6     2    2    4
7     2    3    2
8     2    4    3
9     3    1    3
10    3    2    4
11    3    3    1
12    3    4    8
Wenn ich jetzt ne SQL Abfrage erstelle, um bspw. die zugehörigen Werte von (1/2) bis (3/4) zu ermitteln, dann bekomme ich als Rückgabemenge doch alle Werte mit den IDs von 2 bis 12. Das sind aber zuviele, denn die Werte mit der ID 5 und 9 gehören ja nicht zu der Rückgabemenge, da sie außerhalb des gewählten Rechtecks liegen.

mkinzler 23. Mai 2009 13:50

Re: Vom zwei-dimensionalen ins ein-dimensionale...
 
SQL-Code:
Select Wert from tabelle where x between 1 and 3 and y between 2 and 4;

Mithrandir 23. Mai 2009 13:54

Re: Vom zwei-dimensionalen ins ein-dimensionale...
 
Hmm, so könnte man das natürlich auch machen... :gruebel:

//Edit: Danke :stupid:

Dax 23. Mai 2009 14:31

Re: Vom zwei-dimensionalen ins ein-dimensionale...
 
Zitat:

Zitat von Daniel G
Allerdings muss ein Index doch immer eindeutig sein, oder?

Du wirfst da Indizierung und Constraints in einen Topf. Bei Primärschlüsseln werden natürlich beide Konzepte angewendet - Index und Unique-Constraint - aber im allgemeinen Fall kannst du auch eine konstante Spalte indizieren. Bringt nur nix, ausser Kosten ;)

DP-Maintenance 23. Mai 2009 14:36

DP-Maintenance
 
Dieses Thema wurde von "mkinzler" von "Programmieren allgemein" nach "Datenbanken" verschoben.
FireBird ist eine Datenbank


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:16 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