![]() |
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... |
welche datenbank genau wär sicher auch noch recht nett zu wissen :D, ich mein, sql datenbanken gibts ja wie sand am meer...
|
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 |
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 ... ;) |
@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 |
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. |
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 |
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 |
scheint ne gute erklärung zu sein, und den rest kann man dann ja in den online manuals und so nachlesen :)
|
index = key??
da hats was, ich kann doch beide getrennt definieren, oder? |
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 |
ich hab immer keys geschrieben, meine natürlich indizes ...
|
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