Zum Inhalt springen

View oder Synonym


The_red_one

Empfohlene Beiträge

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

B) 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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 1 Monat später...

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...