WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Datenbankfragen (http://www.wcm.at/forum/showthread.php?t=42320)

Who-T 09.01.2002 11:03

Datenbankfragen
 
hi leute

da unser vortragender unfähig ist hätt ich ein paar fragen an die db-kenner und könner.

1) was ist ein constraint
2) wie genau definiere ich foreign keys
3) was ist ein index?

das sind einmal die, die akut sind, in folge kommen dann noch mehr befürcht ich.




mein bestelltes sql buch dauert leider noch...

valo 09.01.2002 11:35

welche datenbank genau wär sicher auch noch recht nett zu wissen :D, ich mein, sql datenbanken gibts ja wie sand am meer...

Who-T 09.01.2002 13:03

naja, hauptsächlich oracle
aber mir wär mit mysql usw auch schon sehr geholfen.

so viel unterschied ist ja (zumindest beim theoretischen) nicht, was frage 1 und 3 betrifft, wenn ich mich nicht irre

2 wäre for allem für oracle und mysql gut zu wissen

valo 09.01.2002 15:55

stimmt, 1 und 3 sollten überall in etwa gleich sein (3 in jedem fall :D)

ad 2: keine ahnung...

kurz google bemüht mit "constraint oracle db": :D

www.orafaq.com --> sollte dir alle infos geben die du haben willst ...

und "constraint mysql"

www.mysql.com --> dort gibts manuals dazu, da sollte das wohl drin stehn :D lesefaul sollte man halt nicht gerade sein ... ;)

artemisia 09.01.2002 19:13

@who-t

ad 2)
ist eigentlich auch nicht so ad hoc zu beantworten ..zumindest nicht in einem kurzen posting.
wo genau liegt dein prob?
habt ihr die normalisierung von tabellen durchgesprochen?
falls es nur um die syntax geht, ist folgendes buch eine gute anschaffung:
sql in a nutshell, o'reilly, isbn 3-89721-197-1
(behandelt sql server, MySQL, oracle und postgresSQL)
falls allerdings verständnisfragen hinter deiner anfrage stehn ... würd ich dir ein paar infos am we mailen ... wenn du sie dann noch brauchst.

greeetz
artemisias

Who-T 09.01.2002 19:24

jo, her damit :ja:

naja, wir haben normalisierung gemacht, 1 bis 3 NF zumindest, die hab ich auch verstanden.

den constraint hat er mit constraint erklärt, was irgendwie irrsinnig von pädagogischen kenntnissen zeugt.

nach fragerei bin ich mittlerweile soweit, dass das für fehlermeldungen wichtig ist, weil die dann besser lesbar sind und für joins unter gewissen umständen.

pc.net 09.01.2002 19:50

constraint ist wie aus dem englischen übersetzt eine einschränkung oder beschränkung.

und zwar: wenn eine column (oder mehrere columns zusammen) nicht NULL sein darf oder wenn nur bestimmte werte vorkommen dürfen (zb: bei geschlecht nur 'M' oder 'W') bzw. wenn der wert eindeutig (=unique, zb: primärschlüssel) sein muß oder sich auf einen schlüssel einer anderen tabelle bezieht (=foreign key), dann bezeichnet man das als einen constraint.

gruß
pc.net

ps: ich hab jetzt google konsultiert und eine sehr gute beschreibung gefunden: http://www.mathematik.net/IT-Sql-oracle/sq02s8.htm (übergeordnete seite hier)

edit:
achja - hier das google-suchergebnis


kikakater 09.01.2002 22:31

1. Was ist ein constraint ?

Ein constraint ist ein logischer - vom Anwender/Programmierer/SAP-Kundenbetreuer gebildeter, willkürlicher - Zusammenhang zwischen einer mehrfachen logischen Bedingung und einer im constraint definierten Aktion bei Zutreffen dieser Bedingung.

Der Zweck eines constraints ist das Verhindern von bestimmten, nicht genehmen Werten in bestimmten Feldern, bzw. das gezielte Einsteuern von Werten in einzelne Recordfelder einer Tabelle bei Vorliegen von vorher (eben im constraint) definierten Bedingungen.

Ein constraint sagt tatsächlicherweise folgendes aus: Falls DIES [und DIES oder DIES ...] wahr ist, dann tu DAS [und DAS und DAS] .



2. Was ist ein foreign key ?

Ein foreign key ist ein Fremdkey, der aus einer anderen Tabelle stammt, im Rahmen der Normalisierung einer Datenbank zerlegt man die Daten z.B. in Artikel(nummern und -daten), Lieferanten(namen und -adressen) und benutzt diese foreign keys - also die Artikelnummer bzw. den Lieferantennamen in einer weiteren Tabelle, um eine Bestellung gespeichert in der gleichen Datenbank vorzuhalten.

Wenn ich nun die Daten des Lieferanten haben möchte - ich denke hier z.B. an eine Telefonnummer oder halt an die Adressfelder wie die Straße, die Postleitzahl, den Ort oder auch andere DATEN-Felder der Tabelle Lieferant - muß ich mit dem sogenannten 'foreign key'-Feld aus der Tabelle Bestellung, eben dem Tabellenfeld Lieferantenname, lesend auf die Daten des entsprehenden Lieferanten zugreifen, und die erhaltenen Daten in eine Bildschirmmaske oder einen Druckbereich programmtechnisch einsteuern.

Mit anderen Worten läßt sich sagen, daß die Tabelle Bestellung u.a. zwei Felder besitzt: Artikelnummer + Lieferantenname. Beide Felder sind nicht nur Felder der Tabelle Bestellung sondern eben in dieser Funktion parallel und zusätzlich 'foreign key'-Felder ... der ganze Witz bei einer relationalen Datenbank.

Ich benutze also die Artikelnummer als Keyfeld in der Tabelle Bestellung. Kommen tut die Artikelnummer (das ist der foreign key in der Tabelle Bestellung, das Feld Lieferantenname ist übrigens ein weiterer foreign key) aber aus einer fremden (=foreign table) Tabelle - konkret aus der Tabelle Artikel.

Um zu den Artikel-DATEN zu kommen, muß ich ein SELECT * FROM Artikel WHERE Artikelnummer = Artikelnummer der Bestellung ausführen und die erhaltenen Datenbankfelder des Records in die vorgesehenen Felder des Bildschirmbereichs /Druckbereichs stellen.

Das gleiche muß man mit den Lieferanten-DATEN machen. Zuerst die Daten lesen, dann die Felder versorgen.



3. Was ist ein Index ?

Ein Index ist eine Kurzform einer Tabelle in einer bestimmten Reihenfolge sortiert.

Was heißt das ?

Ich habe die Felder Nachname, Vorname, VSNR, Adresse, Beruf.

Jetzt kann ich mehrere Indices erzeugen (CREATE INDEX ...)

Index 1: Nachname + Vorname (nicht unique, es können duplicates bzw. auch duplicate entries also doppelte Einträge vorkommen: z.B. Müller Werner)

Index 2: Nachname + Vorname + VSNR (=Sozialvers.-nummer). Dieser Index (=Schlüssel, =Key) ist eher schon - will sagen MUSS sein ... was ? ... Unique bzw. "eindeutig".

Index 3: VSNR

Index 4: Vorname

Was ist der Zweck eines Indices ?

1. Punktgenauer Zugriff auf Daten. D.h. es ist kein komplettes Durchlesen der Datentabelle notwendig, weil man den Index benutzt um die Position des Datentabellenrecords zu erhalten und dann die Information enthält. Das Beschleunigen des Lesevorgangs passiert implizit, also automatisch, je nach Gegebenheit. Habe ich einen entsprechenden Index, muß die SQL-Datenbankengine keinen "full table scan" ausführen, sondern kann den Index benutzen um GEZIELT zu den Datenfeldern (=zum Datenrecord) zu kommen.

2. Sortiertes Lesen innerhalb einer Tabelle um alle Lieferanten von B bis Q auszudrucken, zu mahnen etc, etc !


Ich hoffe, es ist alles halbwegs verständlich gewesen.

mfg
Kikakater

valo 10.01.2002 01:16

scheint ne gute erklärung zu sein, und den rest kann man dann ja in den online manuals und so nachlesen :)

Who-T 10.01.2002 16:42

index = key??
da hats was, ich kann doch beide getrennt definieren, oder?

it00x30 10.01.2002 18:56

ein key (ich denke mal du meinst den primary key) ist implizit auch ein index (oracle legt automatisch bei einem primary key einen index an)

ansonsten wäre ich mit indizes eher vorsichtig, da datenbanken je nach vorhandenen keys die schnellsten suchverfahren wählen (nicht jedes SELECT * FROM TABLE wird vom db-parser gleich übersetzt!) - wenn viele "schlechte" keys erstellt wurden kann das unter umständen die datenbank verlangsamen - aslo nur dort setzten, wo er wirklich sinnvoll ist

it00x30 10.01.2002 19:01

ich hab immer keys geschrieben, meine natürlich indizes ...

kikakater 10.01.2002 21:06

Ein Index ist ein binärer Baum zum schnellen Auffinden von Datensätzen.

Ein Key ist ein Datenpfad, seine einzelnen Feldnamen aus den er sich zusammensetzt fungieren als Bildungsvorschrift für einen Index.

Weiters wird der Key verwendet um an Informationen in einer bestimmten Sortierreihenfolge heranzukommen.

Aus welchen Feldern sich so ein Index zusammensetzt, kann man festlegen. Wenn man eine bestimmte Sortierreihenfolge zustande bringen möchte, definiert man ein Gedankengebilde, den Key sozusagen. Physisch liegt dem ganzen eine Datenstruktur namens Baum zugrunde. Ein Index ist so ein Baum. Im Index sind die jeweiligen Werte der Keyfelder der Datenbanktabelle gespeichert zusammen mit einer Positionsangabe des dazugehörigen Datensatzes der Tabelle.

Welcher Index verwendet wird und ob einer von den jeweils definierten Indices einer Tabelle verwendet werden kann entscheidet sich durch die ORDER BY Klausel. Fehlt diese Klausel dürfen die Daten irgendwie sortiert bzw. sogar unsortiert daherkommen, dann benötigt man den Index gerade noch für die WHERE Bedingung. Es wird dann logischerweise jener Index von der Datenbank verwendet, welcher die entsprechende erste Column der WHERE Bedingung als erste Column (erstes Keyfeld) definiert hat. Entsprechend ist die Auffindung des korrekten Indices auch bei der zweiten Column und weiterer.

Hat man zwei Indices:

1. Nachname, Vorname
sowie
2. Vorname, Nachname

und steht ORDER BY Nachname,Vorname dann wird der Index 1 verwendet.

Hat man lediglich einen und zwar folgenden Index auf die entsprechende Tabelle definiert:

1. Nachname

dann entscheidet der Optimizer ob dieser - nicht eindeutige, sowie bezogen auf das Feld Vorname unsortierte - Index verwendet oder eine temporäre Sortierung nach der Rangfolge Gruppe=Nachname, Untergruppe1=Vorname durchgeführt wird.

Index = Verweisdaten innerhalb der Datenbank

Key = Datenpfad der Anwendung, eindeutige bzw. gruppierte Identifizierung eines Datensatzes bzw. von Datensätzen

Bezogen auf den Datenbankindex ist der Indexkey die Bildungsvorschrift und gleichzeitig die Sortierreihenfolge innerhalb des Indexbaumes.

mfg kikakater


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag