Liste in einer Datenbank adden

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Ernie1412
User
Beiträge: 161
Registriert: Freitag 10. Januar 2020, 20:38

ich hab eine Datenbank.
in der Datenbank sind dann ID, Name, Nachname, Filmname1 ,iMDBLink1,Filmname2, imdbLink2, ...
bei Filme kann man da eine Liste adden ?
oder wie mache ich das am besten ?
Anhang an eine neue Tabelle die dann die ID von der 1. übernimmt ?
In der Spalte "Filme" soll dann Filmname und IMDB Link rein.

ich hab dann immer für jeden Film, eine neue Spalte angelegt. Auf Dauer ist das aber Mist
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Das ist auch falsch.
Such mal nach "Normalisierung" im Bezug auf Datenbanken. Damit solltet du ein Verständnis entwickeln, wie Relationen funktionieren.
Ernie1412
User
Beiträge: 161
Registriert: Freitag 10. Januar 2020, 20:38

habs nun hinbekommen, zumindest zu ändern per DB Browser.

wie addet und updatet man es nun ?
In 2 schritten ?
ich hab nun 2 Tabellen:
DB_Artist
NamesLink

id=SELECT ID FROM DB_Artist WHERE Name='Karl Gustaf'
UPDATE NamesLink SET ArtistLink='https://... ' WHERE NameID={id}

oder geht das auch in einem einzelnen Befehl ?
NamesLink hat -> ID, NamesLink , NameID
NameID steht die ID von DB_Artist drin
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Ernie1412: Das scheint jetzt nicht so viel mit dem Beispiel aus dem ersten Beitrag zu tun zu haben.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Ernie1412
User
Beiträge: 161
Registriert: Freitag 10. Januar 2020, 20:38

Filmname1 ,iMDBLink1,Filmname2, imdbLink2 das ist nun in der DB_NamesLink drin (UPDATE NamesLink SET ArtistLink='https://imdb....)
NamesLink hab ich in DB_NamesLink geändert, nicht das es mit dem Attribute "NamesLink" Verwechselungen gibt.
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Ernie1412: Da gibt es keine Verwechslungen, es macht keinen Sinn vor jeden Tabellennamen ein DB_ davor zu setzen. Ich würde da auch bei Kleinschreibung bleiben, weil bei SQL kein Namen nicht zwischen Gross- und Kleinschreibung unterschieden wird und NamesLink, nameslink, NAMESLINK, nAmESLiNk, … alles der gleiche Name sind.

Tabellennamen, also eigentlich die Namen von Relationen, sind sehr ähnlich zu Klassen. Was ist ein `NamesLink`? Das ist doch eigentlich ein Film‽ Wie speicherst Du zwei Künstler die im gleichen Film mitspielen und diesen Film? Da hast Du doch dann wieder Redundanz. Ein Künstler kann in mehreren Filmen mitspielen, in einem Film können aber auch mehrere Künstler mitspielen. Das ist eine n:m-Beziehung, da braucht man drei Tabellen. `artist`, `movie` und eine Tabelle die beides zuordnet, zum Beispiel `artist_to_movie`.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Ernie1412
User
Beiträge: 161
Registriert: Freitag 10. Januar 2020, 20:38

... FROM DB_NamesLink WHERE ID IN (SELECT DarstellerID FROM DB_Artist ...

das hab ich gesucht :)
Jetzt für UPDATE was "fummeln"

man muss sich schon ziemlich konzentrieren für diese Verknüpfungen
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Keine Ahnung, was du mit dem Post sagen willst aber ich denke, du solltest dich erst einmal auf das konzentrieren was __blackjack__ geschrieben hat, damit der Status "funmeln" irgendwann besser wird.
Ernie1412
User
Beiträge: 161
Registriert: Freitag 10. Januar 2020, 20:38

"fummeln" heisst bei mir Suche im Netz und gucken was passt bzw selber überlegen.
je weiter man vorran kommt , um so mehr Neues kommt auf einen zu.
Aber ich hab schon die Lösung gefunden.

ich hab nun eine DB_ArtistLink die als "Zwischenbasis" fungiert.
ich hab nun 3 Tabellen
Artist, Link, Studio
in der Link sind dann die ID's von Artist und Studio.
mit INNER JOIN https://www.w3schools.com/sql/sql_join_inner.asp
gehts dann bzw als "SELECT ArtistID,Link FROM DB_NamesLink WHERE ArtistID IN (SELECT ArtistID FROM DB_Artist WHERE Name = '{artistname}');""

ich hab vorher die ID's von Link und Studio noch in Artist drin gehabt. Das war ein Denkfehler, weil überflüssig. Aber so lernt man wie es geht.
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Das ``WHERE Name = '{artistname}');""`` sieht gefährlich danach aus als wenn da ein Wert in SQL als Zeichenkette rein formatiert wird. Das macht man nicht. Einmal aus Sicherheitsgründen. Und auch weil es fehleranfällig ist, wenn man sich dann beispielsweise mal Daten zu Peter O'Toole anschauen möchte.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten