Zum Inhalt springen

SQL + Normalisierung


der_tommy

Empfohlene Beiträge

hi,

zu dem Thema kam auch relativ wenig im Forum dran.

Ein Werkenlehrer führt folgende Tabelle:

Name: Meier Daniel

Klasse: 2C

KL-Lehrer: Hew

Fachnoten: 3,4,5

Fleissnoten: 2,3,3

Name: Aebi Daniel

Klasse: 2C

KL-Lehrer: Hew

Fachnoten: 4,5,5

Fleissnoten: 5,5,4

Name: Hammer Sven

Klasse: 1B

KL-Lehrer: Kranz

Fachnoten: 1,3

Fleissnoten: 6,6

Name: Caflisch Erika

Klasse: 3A

KL-Lehrer: Müller

Fachnoten: 4,4,5

Fleißnote: 4,2,4

Name: Hammer Beatirce

Klasse: 3A

KL-Lehrer: Müller

Fachnoten: 5,5,6

Fleissnoten: 6,6,6

Aufgabe 1

Wende die hier die 1. Normalform an!

Aufgabe 2

Gehe von Aufgabe 1 in die zweite Normalform über und Stelle die Daten in der 2. Normalform dar.

Aufgabe 3

Gehe von Aufgabe 2 in die dritte Normalform über und stelle die Daten in der 3. Normalform dar.

Naja, und wer möchte kann dann noch das Relationsmodell mit Beziehungen etc. aufzeichnen ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

1.NF:

Tabelle Schüler:

Name: 'Meier'

Vorname: 'Daniel'

Klasse: '2C'

KL-Lehrer: 'Hew'

Fachnote1:3

Fachnote2:4

Fachnote3:5

Fleissnote1:2

Fleissnote2:3

Fleissnote3:3

2.NF:

Tabelle Schüler:

SchülerID:1 Primary Key

Name: 'Meier'

Vorname: 'Daniel'

Klasse: '2C'

KL-Lehrer: 'Hew'

Fachnote1:3

Fachnote2:4

Fachnote3:5

Fleissnote1:2

Fleissnote2:3

Fleissnote3:3

3.NF:

Tabelle Schüler:

SchülerID: (serial) Primary Key

Name: (varchar) bspw. 'Meier'

Vorname: (varchar) bspw. 'Daniel'

KlassenID: KlassenID (integer) Foreign Key

KL-LehrerID: KL-LehrerID (integer) Foreign Key

Fachnote1: NotenID (integer) Foreign Key

Fachnote2: NotenID (integer) Foreign Key

Fachnote3: NotenID (integer) Foreign Key

Fleissnote1: NotenID (integer) Foreign Key

Fleissnote2: NotenID (integer) Foreign Key

Fleissnote3: NotenID (integer) Foreign Key

Tabelle Klassen:

KlassenID (Serial) Primary Key

Klasse (varchar) bspw. '2C'

Tabelle Lehrer:

KL-LehrerID (Serial) Primary Key

KL-Lehrer (varchar) bspw. 'Hew'

Tabelle Noten:

NotenID (Serial) Primary Key

Note (integer) bspw. 1

Ich hoff Du meinst in etwa sowas:) ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also in der 2.Normalform musst jedes Attribut voll funktional vom Schlüssel abhängen.

Wie SchülerNr , NotenNr , LehrerNr.

...da wir aber jetzt mehrere Primärschlüssel in der Tabelle Schüler haben müssen wir die Lehrer in eine separate Relation umwandeln und ihre Daten in eine eigene Tabelle bringen.

is das für die 2.Normalform ausreichend???

Link zu diesem Kommentar
Auf anderen Seiten teilen

...glaubt ihr wirklich, dass sowas dran kommt? Ich meine, die meisten von uns werden sowieso "instinktiv" die dritte Normalform anwenden, wenn sie eine Datenbank aufziehen...

Ausserdem kostet das doch eh nur viel zu viel Zeit in so einer Prüfung... ein Bekannter aus dem Prüfungsaussschuss hat gemeint, dass da alle Fachleute dagegen gewettert hätten, als die Sache zur Sprache kam...

Gruss,

der Onkel

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ist bestimmt total falsch aber man kann es ja mal probieren

aus Si er! *lach..

1 NF:

SchülerName

Klasse

Kl-Leher

Fachnote

Fleißnote

2 NF:

SchülerID

SchülerName

LehrerID

Kl_Lehrer

NotenID

Fachnote

Fleißnote

KlassenID

Klasse

3 NF:

Tabelle Schüler

SchülerID (PK)

SchülerName

NotenID (FK)

LehrerID (FK)

KlassenID (FK)

Raum

Tabelle Lehrer

LehrerID (PK)

KlassenID( FK)

Kl-Lehrer

Name usw...

Tabelle Klasse

KlassenID (PF)

Klasse

Tabelle Noten

NotenID (PK)

Fleißnoten

Fachnoten

Link zu diesem Kommentar
Auf anderen Seiten teilen

..ich versuche es zu erklären:

Da in der 2.Normalform alle Nicht-Schlüssel-Attribute funktional abhängig von ihrem Primärschlüssel sind, können immer noch Anomalien auftreten. z.B. wenn du eine Note änderst, müsste diese in mehreren Datensätzen mit geändert werden

Um das zu umgehen werden in der 3.Normalform die transitiven Abhängigkeiten (Abhängigkeit zwischen nicht Schlüsselattributen) in eigene Relatioenen bzw. Tabellen ausgelagert.

Link zu diesem Kommentar
Auf anderen Seiten teilen

@ThimschE

also in der 2.Normalform sollen ja alle Teile in eine eigene Tabelle ausgelagert werden. Also Zeilen mit unterschiedlichen Werten:

2 NF:

SchülerID

SchülerName

KlassenID

---------------

LehrerID

Kl_Lehrer

---------------

NotenID

Fachnote

Fleißnote

---------------

KlassenID

Klasse

Wichtig sind die 1-N oder auch M-N Beziehungen. Wie z.B. Ein Schüler kann nur eine Klasse haben, aber 1 Klasse kann mehrere Schüler haben usw.

Ich glaube so wie ich es dastehen habe ist es noch nicht ganz fertig, aber ich hoffe ich bin auf dem richtigen Weg.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also, Für ein Unternehmen, das Baumaschinen vermietet, ist eine Datenbank zu erstellen.

1. Bestimmen sie nach den NF die Tabellenstruktur der Rela.

DB

2. Entwickeln sie ein ER Modell

Attribute

Typ, Art, Ndl_Kennzeichen, Mietbegin, Mietende, Kfz_kennzeichen,

Hersteller, KundenAdresse, Kundenart, AnsprechPartner, Name,

Befähigungsklasse, Inspektionsdatum, Werkstatt, Anfang-km, End-km, Anfangs-Betriebsstunden, End-Betriebsstunden, Kaufdatum, Tarif-Tag, Tarif-km, Tarif-Betriebsstunden, Ansprechpartner(Ndl), Niederlassungsort.

Dann legt mal los Jungs und Mädels

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mach mit der neuen Aufgabe doch einfach einen neuen Thread!

Zu der anderen Aufgabe sage ich nur: die 3. NF kann so nicht stimmen!

Original geschrieben von ThimschE

3 NF:

Tabelle Noten

NotenID (PK)

Fleißnoten

Fachnoten

In dem Feld Fleißnoten und Fachnoten hättest Du mehrere Einträge, durch Kommata getrennt. Ist nicht!

Sinnvoller wäre eine Notentabelle mit

NotenID(PK)

SchülerID(FK)

Note

Notenart

Die ist zwar dann mit mehr Zeilen, aber so kommt es mit der Normalisierung hin. Der Fremdschlüssel NotenID aus der Tabelle Schüler fällt dann natürlich raus.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von ThimschE

Dann legt mal los Jungs und Mädels

Na dann bin ich mal so motivert und beginne obwohl ich nicht glaube (nicht glauben will!!9 das eine Aufgabe in diesem Umfang und mit so seltsamen Attributen drankommt :-)! Hab auch nicht alle miteingebaut!

Tabelle Maschinen

MaschinenNR

Typ

Art

KFZKennzeichen

Hersteller

Kaufdatum

Tabelle Kunde

KundenNr

Name

Vroname

Straße

Ort

Kundenart

AnsprechpartnerNR

Tabelle Ansprechpartner

AnsprechpartenerNr

Name

Befähigungsklasse

Tabelle Vermietung

VermietungsNr

Mietbegin

Mietende

ZwischentabelleVermietung/Maschinen

MaschinenNr

VermietungsNr

AnfangKm

EndKm

Zwischentabelle Maschinen/kunde

MaschineneNr

KundenNr

Tja mehr fällt mir zu den Attributen nicht ein würde ich dafür wohl ein paar Punkte bekommen auch wenn die Hälfte falsch ist oder fehlt???

Link zu diesem Kommentar
Auf anderen Seiten teilen

Schueler:

*Schueler_ID

Name

Vorname

Klasse

Noten_Id

K-Lehrer_ID

Noten

*Noten_ID

Fleissnote

Fachnote

Kl-Lehrer

*K-Lehrer_ID

Name

Schuler_ID

KLasse

Schueler n:1 Kl-Lehrer

Kl-Lehrer 1:n Noten

Schueler 1:n Noten

Warum noch mal eine Tabelle Klasse aufmachen, die ist doch eindeutig?

Link zu diesem Kommentar
Auf anderen Seiten teilen

@ Firewire

relationale Datenbankmodelle sollten immer von der realen Welt absrahieren. Und somit würde es mehr Sinn machen, hat man eine Tabelle der möglichen Klassen, eine Tabelle der Lehrer in der Schule und eine Tabelle der Schüler. Du musst auch immer auf Erweiterbarkeit der DB hinzielen. Bis zur 3. NF wäre es so logischer:

Schüler

id

name

vorname

klasse

fachnoten

fleißnoten

Klassen

id

klasse

Lehrer

id

name

vorname

klasse

so ist es doch am logischsten. Warum sollte ich noch eine Tabelle Noten aufmachen ? Ist doch eigentlich blödsinn. Höchstens ich möchte auf einfache Weise den Durchschnitt eines Jeden Schülers ausrechnen. Dann brauche ich ein Tabelle Noten die alle derzeit Verfügbaren Noten enthält. Das wäre dann aber eine m:n Beziehung ;-) und müsste über eine Zwischentabelle gelöst werden, zumindest im physischen Datenmodell, nicht im logischen

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von der_tommy

Schüler

id

name

vorname

klasse

fachnoten

fleißnoten

Deine Tabelle "Schüler" kann nicht der 3ten Normalform entsprechen, denn mehrere voneinander getrennte Werte innerhalb eines Attributs müssen bereits in der 1ten Normalform aufgelöst werden. (sofern es logisch ist!!!)

Wie könntest Du z.B. in Deinem Modell eine Deutschnote von einer Englischnote unterscheiden ... und dann auch noch die zum jeweiligen Fach dazugehörige Fleissnote?

Mein Vorschlag wären zwei weitere Tabellen

Tabelle: Fach

fach_id

fachbezeichnung

Tabelle: Zeugnis

jahr

schueler_id

fach_id

fachnote

fleissnote

Diese Variante lässt in meinen Augen auch eine beliebige Erweiterung zu. Oder habe ich etwas übersehen?

Gruss

Metaner

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von der_tommy

Schüler

id

name

vorname

klasse

fachnoten

fleißnoten

Deine Tabelle "Schüler" kann nicht der 3ten Normalform entsprechen, denn mehrere voneinander getrennte Werte innerhalb eines Attributs müssen bereits in der 1ten Normalform aufgelöst werden. (sofern es logisch ist!!!)

Wie könntest Du z.B. in Deinem Modell eine Deutschnote von einer Englischnote unterscheiden ... und dann auch noch die zum jeweiligen Fach dazugehörige Fleissnote?

Mein Vorschlag wären zwei weitere Tabellen

Tabelle: Fach

fach_id

fachbezeichnung

Tabelle: Zeugnis

jahr

schueler_id

fach_id

fachnote

fleissnote

Diese Variante lässt in meinen Augen auch eine beliebige Erweiterung zu. Oder habe ich etwas übersehen?

Gruss

Metaner

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...