Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Mehrere Angfänger-Fragen bezüglich MYSQL-Workbench (https://www.delphipraxis.net/187631-mehrere-angfaenger-fragen-bezueglich-mysql-workbench.html)

iHüsoo91 16. Dez 2015 14:49

Datenbank: MYSQL • Version: 6.3 • Zugriff über: Workbench

Mehrere Angfänger-Fragen bezüglich MYSQL-Workbench
 
Hallo,

ich bin neu hier und habe gleich mehrere Fragen.
Ich habe gerade das Fach Datenbanken in der Uni und eigentlich sollen wir nur lernen, wie man eine Datenbank anlegt aber ich will es erweitern
Ich arbeite mit MY-SQL Workbench
Zu meinen Fragen:

Also ich will eine Datenbank erstellen die 2-3 Tabellen beinhaltet
Also die 1.Tabelle "User" beinhaltet folgendes:
-----
ID
Vorname
Nachname
Alter
Straße
Hausnummer
Handy
E-Mail

Bsp hierfür:
1 Hans Peter 55 Galaxiestraße 17 01234566 hans.peter@gmx.de
-----

Die 2.Tabelle "Skills" soll die Skills beinhalten die ein User hat
------
ID
Skill
Preis pro Tag

Bsp hierfür:
1 C++ 200€
-----

So jetzt habe ich was gelesen, dass man wenn man einen Primärschlüssel hat einen Fremdschlüssel benutzen kann
Jedoch haben wir das Thema noch nicht behandelt
Ich habe jetzt recherchiert jedoch verstehe ich das nicht ganz
Was bringt mir der Primärschlüssel? und was der Fremdschlüssel?
Ich habe auch in google gesehen, dass ich theoretisch auch einen Fremdschlüssel benutzen könnte.
Die Idee ist diese:
Wenn ich eine 3.Tabelle namens "User_Skills" anlege, könnte ich diesen doch als Fremdschlüssel verwenden
Das würde dann so aussehen

ID
User_id
Skill_id


Müsste jetzt die User_id von der Tabelle User_Skills auf die id vom der Tabelle User zugreifen?
Aber wozu brauche ich das? welchen Vorteil habe ich?
Und wie sollte dann der Eintrag in der User_Skills Tabelle aussehen?
1 1 1
Würde heißen
Hans Peter 55 Galaxiestraße 17 01234566 hans.peter@gmx.de C++ 200€

Werden also beide Tabellen miteinander verknüpft?
Wäre nett, wenn mir das jemand mal erklären könnte?

haentschman 16. Dez 2015 15:00

AW: Mehrere Angfänger-Fragen bezüglich MYSQL-Workbench
 
Hallo und willkommen hier...:dp:

Im Prinzip geht es darum die Datenbank zu normalisieren. (z.B. Vermeidung von Redundanzen) im Wiki ist es etwas ausführlicher erklärt. https://de.wikipedia.org/wiki/Normal...28Datenbank%29
Man muß das nicht bis ins Extreme handhaben. Aber in jedem Datensatz die vollständige Adresse zu haben ist eher unproduktiv... :P Man muß aber nicht die Orte, Straßen und Hausnummern normalisieren...was man könnte.

Zitat:

Was bringt mir der Primärschlüssel? und was der Fremdschlüssel?
Der Primärschlüssel definiert, in der Regel, die Eindeutigkeit des Datensatzes z.B. über eine automatische ID oder einer Kombination von Feldern. Der Fremdschlüssel definiert, einfach ausgedrückt, die "Beziehung" zu einer anderen Tabelle. Über verschiedene Bedingungen steuert die DB z.B. das kein Datensatz eingetragen werden kann wenn die zugehörige ID nicht in der Fremdtabelle vorhanden ist.

Der Möglichkeiten gibt es noch viel mehr... :P

PS: Das Prinzip Normalisierung ist bei jedem DBMS identisch.

jobo 16. Dez 2015 15:12

AW: Mehrere Angfänger-Fragen bezüglich MYSQL-Workbench
 
Habs mal überflogen. Das hast Du im Prinzip alles richtig beschrieben.
Wofür Du das brauchst, könntest Du merken, wenn Du ein Select Statement schreibst, was Dir User und Skills ausgeben soll, ohne die 3. Tabelle zu haben.
Der Primärschlüssel dient der (eindeutigen) Identifikation eines Datensatzes einer Tabelle.
Der Fremdschlüssel zeigt auf einen solchen Primärschlüssel und schafft so aus einer anderen Tabelle bzw. Datensatz eine Zuordnung zum Datensatz mit dem jeweiligen Primär-Schlüssel. Es ist eben einfach eine Zuordnung.
Jenachdem wie Du nun die Fremdschlüssel in den Tabellen einbaust und auf andere Tabellen zeigen lässt, schaffst Du also Verbindungen zwischen den Datensätzen.
Du hast mit der 3. Tabelle eine n:m Verbindung angelegt. Heisst jeder User kann alle Skills haben.
In einem anderen Fall z.B. Bestellungen, bestehend aus der Bestellung selbst und den Bestellpositionen (2 Tabellen) wäre eine solche Zuordnung (n:m) unsinnig. Hier erhält lediglich die Bestellposition einen Fremdschlüssel zur Bestellung.

Ich denke, wenn Du etwas mit SQL rumspielst und dein Beispiel erweiterst und abfragst, wirst Du die Grundzüge schnell verstehen.

P.S: Was Du beschrieben hast, nennt man das Datenmodell. Es ermöglicht eine Verknüpfung. Erstmal steht halt einfach alles so da, wie Du es definiert hast und mit Daten versehen hast. Eine Abfrage (Query, Select Statement, ..) kann diese Tabellen und verknüpfen, anhand der Schlüsselfelder.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz