Frage zu View-Tabellen

21/03/2008 - 21:02 von Hilmar Bunjes | Report spam
Hallo,
ich arbeite derzeit an einem Reservierungssystem und benötige gerade
eine Funktionalitàt, um eine Anzahl freier Plàtze zu bestimmten
Zeitràumen zu bekommen. Da ich aufgrund von Einschrànkungen bei meinem
OR-Mapper keine Stored Procedures verwenden kann, überlege ich, eine
àhnliche Funktionalitàt über View-Tabellen zu bekommen.

Kurz zur Funktionsweise:
Ich habe eine Tabelle mit Angeboten, die für einen bestimmten Zeitraum
eines Tages gelten. Prinzipiell sieht diese so aus (Zeitdauer gibt in
Minuten an, wie lange ein Kunde das Angebot wahr nimmt):

AngID | UhrzeitAb | UhrzeitBis | Zeitdauer | MaxPersonen
1 | 15:00 | 22:00 | 120 | 100
...

Zusàtzlich habe ich eine Tabelle mit Reservierungen, die so aussieht
(die "bis"-Zeit ergibt sich aus ReserviertAb plus der Zeitdauer im Angebot):

ResID | Datum | ReserviertAb | AnzahlPersonen
1 | 2008-03-21 | 15:30 | 30
...

Jetzt möchte abfragen, wann eine erneute Reservierung am 21. Màrz
durchgeführt werden kann für eine bestimmte Anzahl von Personen. Diese
neue Zeit soll in 15min Schritten gegeben werden.

Im obigen Beispiel wàre für 70 Personen die Antwort: 15:00, 15:15,
15:30, ..., 20:00

Für 75 Personen wàre es: 17:30, 17:45, ..., 20:00

Ich überlege nun, eine View-Tabelle folgendermaßen anzulegen (die
MaxPersonen wird intern wiederum durch eine Stored Procedure berechnet):

Angebot | Datum | UhrzeitAb | MaxPersonen
-
1 | 2008-03-21 | 15:00 | 70
1 | 2008-03-21 | 15:15 | 70
...
1 | 2008-03-21 | 17:30 | 100
1 | 2008-03-21 | 17:45 | 100
...
1 | 2008-03-21 | 20:00 | 100
1 | 2008-03-22 | 15:00 | 100
...
1 | 2008-03-22 | 20:00 | 100
...

Die Abfrage würde bspw. dann lauten:
SELECT UhrzeitAb FROM viewtabelle WHERE
angebot = 1 AND datum = '20080321' AND maxpersonen >= 75

Ich bin mir aber unsicher, wie View-Tabellen intern gehandhabt werden.
Kann ich mir vorstellen, dass diese àhnlich wie Stored Procedures nur
auf die Daten zugreifen, die ich gerade anfrage? Wàre es also von der
Performance und vom Speicherverbrauch ein Unterschied, ob ich eine
Anfrage auf eine View-Tabelle oder eine Stored Procedure schicke?

Vielleicht bin ich auch völlig auf dem Holzweg? Auf für den Hinweis wàre
ich dankbar ;-)

Danke,
Hilmar
 

Lesen sie die antworten

#1 Elmar Boye
22/03/2008 - 12:11 | Warnen spam
Hallo Hilmar,

Hilmar Bunjes schrieb:
ich arbeite derzeit an einem Reservierungssystem und benötige gerade
eine Funktionalitàt, um eine Anzahl freier Plàtze zu bestimmten
Zeitràumen zu bekommen. Da ich aufgrund von Einschrànkungen bei meinem
OR-Mapper keine Stored Procedures verwenden kann, überlege ich, eine
àhnliche Funktionalitàt über View-Tabellen zu bekommen.

Ich bin mir aber unsicher, wie View-Tabellen intern gehandhabt werden.



View-Tabellen gibt es nicht, eine Sicht (View) ist ein
eigenes Element in SQL.

Sichten (View) sind in ihrer Grundform gespeicherte Abfragen,
die vom SQL Server beim Ausführen kompiliert und ausgeführt
werden. Sie benötigen keinen zusàtzlichen Speicherplatz,
abseits ihrer Definition:
<URL:http://msdn2.microsoft.com/de-de/li...4.aspx>

Erweiterungen sind indizierte Sichten (SQL Server 2000), die
zusàtzliche Daten für den Zugriff speichern:
<URL:http://msdn2.microsoft.com/en-us/library/aa933148(SQL.80).aspx>
Bzw. ab SQL Server 2005 partitionierte Tabellen und Indizes:
<URL:http://msdn2.microsoft.com/de-de/li...6.aspx>

und etwas weniger abstrakt der Artikel:
<URL:http://msdn2.microsoft.com/en-us/li...6.aspx>

Beide sind transparent für die Anwendung und unabhàngig
vom Einsatzbereich (Abfrage, Prozedur, Funktion, Sicht).
Sie könnten für den von Dir beschriebenen Anwendungsbereich
von Nutzen sein, wenn Du mit grösseren Volumina umgehst.

Kann ich mir vorstellen, dass diese àhnlich wie Stored Procedures
nur auf die Daten zugreifen, die ich gerade anfrage?



Ja.

Wàre es also von der
Performance und vom Speicherverbrauch ein Unterschied, ob ich eine
Anfrage auf eine View-Tabelle oder eine Stored Procedure schicke?



Nein.

Gruß Elmar

Ähnliche fragen