Händler-Datenbank (SQL-Beispiel)/Identität: Unterschied zwischen den Versionen
Kowa (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Kowa (Diskussion | Beiträge) |
||
| Zeile 52: | Zeile 52: | ||
SELECT * FROM haendler | SELECT * FROM haendler | ||
= | = | ||
haendler -- kein SQL | |||
</source> | </source> | ||
In PostgreSQL läuft diese Anfrage auf einen Fehler, da hier | |||
[[Händler-Datenbank (SQL-Beispiel, PostgreSQL)/Unterabfrage|Unterabfragen]] stets beannt werden müssen. | |||
In PostgreSQL muss man also folgenden Befehl schreiben. | |||
<source lang="sql"> | <source lang="sql"> | ||
SELECT * FROM | SELECT * FROM (SELECT * FROM haendler) AS h | ||
SELECT | |||
</source> | </source> | ||
==Anmerkung== | |||
Die | Die Selektion <code>SELECT * FROM</code> sollte man i. Allg. nur für Ad-hoc-Anfragen | ||
in Tools wie [[phpPgAdmin]] oder [[pgAdmin III]] verwenden. In Programmcode sollte | |||
man darauf verzichten und besser alle Attribute explizit aufführen. Das heißt, | |||
an Stelle von | |||
<source lang="sql"> | <source lang="sql"> | ||
SELECT * FROM haendler | |||
SELECT * FROM | |||
</source> | </source> | ||
sollte man besser | |||
<source lang="sql"> | |||
SELECT hnr, name, adresse FROM haendler; | |||
</source> | |||
SELECT | schreiben. Der Grund ist, dass die <code>SELECT-*-</code>Anfrage ihre Bedeutung ändert, | ||
wenn sich das Schema der Datenbank ändert, wenn also z.B. ein weiteres Attribut zur Tabelle | |||
<code>haendler</code> hinzugefügt wird. | |||
=Quellen= | =Quellen= | ||
Version vom 6. Juli 2012, 12:21 Uhr
Dieser Artikel wird derzeit von einem Autor gründlich bearbeitet. Die Inhalte sind daher evtl. noch inkonsistent.
Dieser Artikel erfüllt die GlossarWiki-Qualitätsanforderungen nur teilweise:
| Korrektheit: 0 (nicht überprüft) |
Umfang: 4 (unwichtige Fakten fehlen) |
Quellenangaben: 5 (vollständig vorhanden) |
Quellenarten: 5 (ausgezeichnet) |
Konformität: 5 (ausgezeichnet) |
Die Identität
Die Identitätsfunktion der Realtionalen Algebra ist eine triviale Funktion: Sie bildet eine Relation (Tabelle) auf sich selbst ab:
$ id: R \rightarrow R $
$ id(r) = r $
Diese Funtion ist idempotent:
$ id(id(r)) = id(r) = r $
In SQL ist es nicht möglich, auf den Inhalt einer benannten Tabelle zuzugreifen, indem man einfach den Namen der Tabelle angibt. Folgends ist als kein korrektes SQL:
haendler
Um den Inhalt einer Tabelle auszugeben, benötigt man also eine Identitätsfunktion. Diese gab es noch in SQL92:
TABLE haendler
In SQL99 (und in PostgreSQL) gibt es diese Funktion nicht mehr. Als Identitätsfunktion kommt hier
SELECT * FROM zum Einsatz:
SELECT * FROM haendler
Das zuvor formulierte Idempozenz-Gesetz gilt auch in SQL, wenn auch mit der eben genannte Einschränkung, dass es sich bei der direkten Angabe eines Tabellennamens um keinen korrekten SQL-Befehl handelt:
SELECT * FROM (SELECT * FROM haendler)
=
SELECT * FROM haendler
=
haendler -- kein SQL
In PostgreSQL läuft diese Anfrage auf einen Fehler, da hier Unterabfragen stets beannt werden müssen. In PostgreSQL muss man also folgenden Befehl schreiben.
SELECT * FROM (SELECT * FROM haendler) AS h
Anmerkung
Die Selektion SELECT * FROM sollte man i. Allg. nur für Ad-hoc-Anfragen
in Tools wie phpPgAdmin oder pgAdmin III verwenden. In Programmcode sollte
man darauf verzichten und besser alle Attribute explizit aufführen. Das heißt,
an Stelle von
SELECT * FROM haendler
sollte man besser
SELECT hnr, name, adresse FROM haendler;
schreiben. Der Grund ist, dass die SELECT-*-Anfrage ihre Bedeutung ändert,
wenn sich das Schema der Datenbank ändert, wenn also z.B. ein weiteres Attribut zur Tabelle
haendler hinzugefügt wird.
Quellen
- Kowarschick (MMDB): Wolfgang Kowarschick; Vorlesung „Multimedia-Datenbanksysteme“; Hochschule: Hochschule Augsburg; Adresse: Augsburg; Web-Link; 2016; Quellengüte: 3 (Vorlesung)
