Mahlzeit,
Danke für die Info, was mich noch interessiert, ich hab auch bei der ID vergabe wohl einiges falsch gemacht,
-
- interpret_id, name (primary key - interpret_id)
- id, interpret_album, spec_id (spec_id bekommt interpret_id von 1. zugewiesen)
- id, song_titel, song_text, spec_id (auch hier ist spec_id die interpret_id von Tabelle 1.)
>
>
> Kann ich bei den Tabellen 2 und 3 auf die 'id' verzichten und stattdessen alle Tabellen mit der interpret\_id versehen?
> Wäre das Sinnvoll?
NEIN! JEDE Tabelle hat eine ID (als Primary Key) zu haben - damit JEDER Datensatz in JEDER Tabelle eindeutig identifizierbar ist. DAFÜR und NUR DAFÜR ist eine ID da. Für NICHTS anderes. Auch nicht, um in irgendwelchen anderen Tabellen als Name oder sonstwas missbraucht zu werden. Es geht NUR darum, Datensätze eindeutig identifizieren und mit anderen Datensätzen verknüpfen zu können.
Und bitte benenne die Spalten sinnvoll. "spec\_id" ist ziemlicher Schwachsinn, wenn Du keine Tabelle "spec" hast - was soll diese ID bedeuten, auf was soll sie verweisen?
> Oder noch besser, kann ich in diesem Fall nicht direkt die Namen als eindeutige IDs benutzen?
NEIN. Name != ID. Eine ID ist sinnvollerweise ein rein numerisches Feld mit einem UNIQUE Constraint und entsprechenden Indizes, so dass man bei einer Abfrage nach einem Datensatz mittels dieser ID auch schnell an ein Ergebnis kommt. Ein Name ist normalerweise ein Textfeld (VARCHAR o.ä.), dessen Indizierung weitaus ressourcenfressender ist, so dass eine Suche nach einem bestimmten Datensatz mittels eines Namens länger dauert und die Datenbank mehr belastet. Des weiteren sind Namen im Prinzip "Schall und Rauch" - theoretisch könnten sie mehrfach vorkommen (außer es gibt Gründe, die dagegensprechen), sie könnten geändert werden usw. ALLEIN eine ID identifiziert einen Datensatz eindeutig.
> Ich stell mir das in etwa so vor
Bitte, tu Dir selbst einen Gefallen: stell Dir nicht so viel vor. Halte Dich einfach an klassisch-bewährte Schemata zur Normalisierung von Tabellen und experimentiere nicht so viel herum. Es hat schon alles einen Sinn und Hand und Fuß, was wir Dir vorschlagen.
Nochmal mein Vorschlag:
Tabelle "interpret":
ID | Name
\---+-----
Tabelle "album":
ID | interpret\_ID | Name
\---+--------------+-----
Tabelle "titel":
ID | Name | Songtext
\---+------+---------
Tabelle "album\_titel":
ID | album\_ID | titel\_ID
\---+----------+---------
So kannst Du jedem Album einen eindeutigen Interpreten zuweisen und Du kannst für jeden Titel zu jedem Album, auf dem er vorkommt, eine Verknüpung anlegen.
Wenn Du ein neues Album anlegst, prüfst Du natürlich ERST, ob der entsprechende Interpret schon vorhanden ist. Wenn ja, nutzt Du dessen ID als "interpret\_ID", ansonsten musst Du auch einen neuen Datensatz in der Tabelle "interpret" anlegen und dessen ID nutzen.
Wenn Du einen neuen Titel anlegst, prüfst Du natürlich ERST, ob das Album, auf dem dieser Titel vorhanden ist, schon vorhanden ist. Wenn jan,utzt Du dessen ID als "album\_ID" beim Anlegen des Datensatzes in "album\_titel", ansonsten musst Du auch einen neuen Datensatz in der Tabelle "album" (und ggf. in der Tabelle "interpret", s.o.) anlegen und dessen ID für den Eintrag in "album\_titel" nutzen.
MfG,
EKKi
--
sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|