The_red_one Geschrieben 28. Juli 2004 Teilen Geschrieben 28. Juli 2004 Wann verwende ich einen View, wann ein Synonym? Es soll nur eine Tabelle einem anderen User zur Verfügung gestellt werden (grant natürlich vorausgesetzt). Ich arbeite mit einer Oracle9i DB. Is ne simple Frage, aber irgendwie sehe ich nicht DEN grossen Unterschied. Merci. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
johnhaltonx Geschrieben 28. Juli 2004 Teilen Geschrieben 28. Juli 2004 Mit einem synonym stellst du die ganze tabelle so wie sie ist zur verfügung. Mit einer View kannst du eine Query "verstecken" Create or replace view emp_vw as select empno, ename from emp where job='SALESMAN'; ein select * from emp_vw bringt dann das ergebnies des im View eingebauten selects. Sehr praktisch um komplexe Logik (Joins z.B.) zu verbergen. Einfach eine View aus dem join machen und select * davon. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
The_red_one Geschrieben 28. Juli 2004 Autor Teilen Geschrieben 28. Juli 2004 Ja ich weiss. Aber wenn ich eine Tabelle 1:1 dem andern User zur Verfügung stellen will,... gibts dann da noch nen Unterschied zwischen Synonym und View? Oder ist das Wurscht? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
AxlHammer Geschrieben 28. Juli 2004 Teilen Geschrieben 28. Juli 2004 Also nen Synonym ist einfach nur nen anderer Name für die Tabelle (oder eben der gleiche, nur für alle sichtbar -> public synonym). Views sind eigentlich mehr dafür gedacht, bestimmte Tabellen (-felder) zu verknüpfen und als eigene Tabelle darzustellen. Ich bin mir nicht ganz sicher, aber ich glaube man kann bei Views auch keine Datensätze einfügen, ändern oder löschen. Gruss, Axl Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
The_red_one Geschrieben 28. Juli 2004 Autor Teilen Geschrieben 28. Juli 2004 Na dann mach ich mal nen View. Ändern, Löschen etc. ist eh ned erlaubt/ möglich vom Programm her, und vielleicht muss ja nachträglich noch eine Einschränkung über where gemacht werden. Merci. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jasper Geschrieben 1. August 2004 Teilen Geschrieben 1. August 2004 Na dann mach ich mal nen View. Ändern, Löschen etc. ist eh ned erlaubt/ möglich vom Programm her, und vielleicht muss ja nachträglich noch eine Einschränkung über where gemacht werden. wenn du eine tabelle 1:1 in den namensraum eines anderen schemas einblenden wilst nimmst du ein synonym, keinen view. ein view hat overhead der in deinem fall unnötig ist. wenn später irgendwann gefiltern werden soll kannst du jederzeit das synonym durch einen view ersetzen, das ist transparent für die applikation. -j Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
tuxfriend Geschrieben 1. August 2004 Teilen Geschrieben 1. August 2004 Für deine derzeitige Anforderung ist eine Synonym die bessere Alternative. Einen View benötigst du immer dann, wenn du a) mehrere Tabellen verknüpfen willst, z.B. CREATE VIEW Ein_View (VSpalte1, VSpalte2) as select Spalte1, Spalte2 from Tabelle1 union all select Spalte1,Spalte2 from Tabelle2 ... Hier hättest du aus irgendeinem Grund zwei Tabellen mit gleichen Attributen die du zu einer virtuellen zusammenfügst. Wenn du nur bestimmte Datensätze einer Tabelle für den Benutzer verfügbar mach willst, z.B.: CREATE VIEW Ein_View (VSpalte1, VSpalte2) as select Spalte1, Spalte2 from Tabelle where K-NR=4711 Im View sind nur Daten des Kunden mit der Nummer 4711 enthalten. Sehr sinnvoll, wenn man Rechtstrukturen abbilden will in denen ein Sachbearbeiter nur Zugriff auf die Daten bestimmter Kunden hat. c) Natürlich kannst du Views auch benutzen um Querys übersichtlicher zu gestalten und z.B. Joins zu verbergen, ist aber nicht hauptsächlich Sinn der Sache. Wenn du eine ganze Tabelle in einem anderen Schema sichtbar machen willst ist das Synonym Mittel der Wahl. Das könnte unter Umständen auch eine Frage der Performance- und des Speicherplatzes sein. Ich tippe bei beiden wirst du mit einem Synonym besser abschneiden. Gruß Nils Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mme Geschrieben 3. August 2004 Teilen Geschrieben 3. August 2004 Beim Speicherplatz (Platte) gibt es keinen Unterschied, da die "normale" View die Daten nicht selber speichert sondern immer auf die "original" Daten zugegriffen wird. Der Unterschied liegt in der Performance. Wenn ein SQL-Statement ausgeführt wird so wird es im Shared Pool des Servers (RAM) geparst und interpretiert und die Execution Pläne werden hier hinterlegt. Hast du Views so müssen immer doppelt soviele Statements geparst und interpretiert werden. Erst das Abfrage Statement auf die View und dann das Statement was in der View hinterlegt ist auf die eigentliche Tabelle. Bei dem Synonym sieht er gleich das es sich um ein Synonym handelt und führt das Statement direkt auf die Tabelle aus.... Wenn du sowieso ne Datenbank hast mit mehreren Giga Ram und arbeitest quasi alleine drauf ist es wohl egal, aber bei einem kleinen OLTP-System ist es durchaus schon ein Unterschied.... Grüße mme Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jasper Geschrieben 17. September 2004 Teilen Geschrieben 17. September 2004 Hast du Views so müssen immer doppelt soviele Statements geparst und interpretiert werden. Erst das Abfrage Statement auf die View und dann das Statement was in der View hinterlegt ist auf die eigentliche Tabelle. und da bist du dir ganz sicher? diese theorie schon mal überprüft? -j Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mme Geschrieben 19. September 2004 Teilen Geschrieben 19. September 2004 Die Aussage das doppelte so viele Statements ausgeführt werden müssen ist sicher so nicht richtig.... Aber ich gehe davon aus das es sicher mehr Statements sind die ausgeführt werden. Sql on recursiv level sowieso.... Man müsste das prüfen können indem man mal ein solches Statemt traced (alter session set sql_trace=true ... ging das glaube ich). In dem so erstellten Logfile werden glaube ich auch die Statements aufgelistet die durch abhängigkeiten ausgeführt werden... Grüße mme Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.