Aufgabe 1

  • Redundanz: mehrfache Speicherung derselben Information in einer Datenbank
    • Erhöhter Speicherplatzbedarf
    • Inkonsistenzen bei Ă„nderungen (wenn Daten nicht ĂĽberall aktualisiert werden)
    • Erhöhter Wartungsaufwand
  • funktionale Abhängigkeit:
    • Wert eines Attributs B kann eindeutig durch den Wert eines Attributes A bestimmt werden
    • Notation: A –> B
    • z.B. in high_score: player_id –> {player_name, player_email}
    • voll funktionale Abhängigkeit: alle Attribute der Abhängigkeit mĂĽssen gegeben sein, um es zu bestimmen, z.B. fĂĽr high_scores: {player_id, game_id} –> score
  • transitive Abhängigkeit: wenn A –> B und B –> C, dann A –> C ⇒ wenn das in der 3. NF gilt, muss die Tabelle mit A, B und C in zwei Tabellen aufgespaltet werden
  • Normalisierung: Prozess zur Strukturierung von Datenbanken, um Redundanz zu eliminieren
    • 1NF: Atomare Werte, keine Mehrwertattribute (z.B. score_info ⇒ score, play_date, play_time)
    • 2NF: 1NF + voll funktionale Abhängigkeit jedes Nicht-SchlĂĽsselattributs von einem PrimärschlĂĽssel
    • 3NF: 2NF + keine transitiven Abhängigkeiten von Nicht-SchlĂĽsselattributen
  • arcade_records: nicht normalisiert (0NF)
  • high_scores: 1NF
  • games: 3NF

Aufgabe 2

players

player_idfirst_namelast_nameemailphone_numberaddressmember_sincemembership_idmembership_level
P001JohnSmithjohn@email.com555-1234123 Main St, Springfield2024-01-15A12345Gold
P002EmmaLeeemma@email.com555-5678456 Oak Dr, Rivertown2024-02-03NULLNone
P003CarlosDiazcarlos@email.com555-9012789 Pine Rd, Lakeview2024-02-20B67890Silver
P004AishaWongaisha@email.com555-3456234 Elm Ave, Springfield2024-03-08C54321Bronze
P005DavidJohnsondavid@email.com555-7890567 Maple Ln, Mountainview2024-03-25D98765Gold

manufacturers

manufacturer_idnamecontact_emailcontact_phonecountrywebsiteactive
MFR01Namcosupport@namco.com800-123-4567Japanhttps://www.namco.comtrue
MFR02Taitoservice@taito.com800-234-5678Japanhttps://www.taito.comtrue
MFR03Konamiarcade@konami.com800-345-6789Japanhttps://www.konami.comtrue
MFR04Capcomsupport@capcom.com800-456-7890Japanhttps://www.capcom.comtrue
MFR05Bay Tekservice@baytek.com800-567-8901USAhttps://www.baytekent.comtrue
MFR06Nintendoarcades@nintendo.com800-678-9012Japanhttps://www.nintendo.comtrue
MFR07Stern Pinballsupport@sternpinball.com800-789-0123USAhttps://sternpinball.comtrue

high_scores

score_idplayer_idgame_idscoreplay_dateplay_timeverified_byrank_position
1P001G001456002025-04-0114:32:00STAFF0013
2P001G002783002025-04-0115:10:00STAFF0011
3P002G001521002025-04-0211:45:00STAFF0022
4P003G0039500002025-04-0216:20:00STAFF0031
5P001G0038200002025-04-0318:05:00STAFF0022
6P004G0041250002025-04-0319:30:00STAFF0011
7P002G0058302025-04-0412:15:00STAFF0031
8P002G008325002025-04-0816:45:00STAFF0021
9P005G001672002025-04-0820:10:00STAFF0011
10P003G0061456002025-04-0909:30:00STAFF0031

transactions

transaction_idplayer_idtransaction_datetransaction_timeamountpayment_methodtransaction_typestaff_idgame_id
T001P0012025-04-0114:30:005.00Credit CardGame CreditSTAFF001NULL
T002P0012025-04-0114:32:001.00Game CreditGame PlaySTAFF001G001
T003P0012025-04-0115:10:001.00Game CreditGame PlaySTAFF001G002
T004P0022025-04-0211:40:0010.00CashGame CreditSTAFF002NULL
T005P0022025-04-0211:45:001.00Game CreditGame PlaySTAFF002G001
T006P0032025-04-0216:15:008.00Digital WalletGame CreditSTAFF003NULL
T007P0032025-04-0216:20:002.00Game CreditGame PlaySTAFF003G003
T008P0012025-04-0318:00:008.00Credit CardGame CreditSTAFF002NULL
T009P0012025-04-0318:05:002.00Game CreditGame PlaySTAFF002G003
T010P0042025-04-0319:25:005.00Credit CardGame CreditSTAFF001NULL
T011P0022025-04-0816:40:005.00CashGame CreditSTAFF002NULL
T012P0022025-04-0816:45:001.00Game CreditGame PlaySTAFF002G008

Aufgabe 3

Transclude of 2.-Normalisierung,-SQL-und-ERM-(Lösung)-2025-04-09-13.53.01.excalidraw

Aufgabe 4

  • DDL (Data Definition Language):
    • Teil der Sprache, welcher ermöglicht, Datenstrukturen und verwandte Elemente zu beschreiben, zu ändern oder zu entfernen
    • in SQL: CREATE TABLE, ALTER TABLE, DROP TABLE
  • DQL (Data Query Language):
    • Teil der Sprache, welcher das Auslesen von Daten ermöglicht
    • in SQL: SELECT
  • DML (Data Manipulation Language):
    • Teil der Sprache, der sich mit allen Auswahl-/EinfĂĽge-/Ă„nderungs- und Löschoperationen beschäftigt
    • in SQL: UPDATE, DELETE FROM, INSERT INTO
CREATE TABLE games (
	game_id INT PRIMARY KEY,
	game_name VARCHAR NOT NULL,
	game_type VARCHAR NOT NULL,
	manufacturer_id VARCHAR NOT NULL,
	purchase_date DATE NOT NULL,
	maintenance_cycle VARCHAR NOT NULL,
	current_status VARCHAR NOT NULL,
	location VARCHAR NOT NULL,
	price_per_play FLOAT NOT NULL,
	FOREIGN KEY (manufacturer_id) REFERENCES manufacturers(manufacturer_id)
); 
  • Bedingung keine Spalte leer ⇒ domänenspezifische Integritätsbedingung (NOT NULL)
  • Integritätsbedingungen
    • = Bedingungen zum einwandfreien Benutzen der Datenbank
    • semantische
      • keine Eingabefehler
      • einheitliche Bezeichnung (z.B. G01 != G001)
    • operationale
      • keine Fehler bei gleichzeitigem Zugriff
      • keine Fehler bei Transaktionen (DirtyRead, LostUpdate)
    • referentielle
      • Datensätze zu PrimärschlĂĽsseln und FremdschlĂĽsseln mĂĽssen existieren
      • bei einer Löschung eines Datensatzes auch zugehörige Datensätze löschen wenn möglich und sinnvoll oder notwendig (SQL: ON DELETE CASCADE, ON DELETE SET NULL, ON DELETE SET DEFAULT)
    • domänenspezifisch (Daten liegen in einem bestimmten Bereich)
      • Datensätze, welche als NOT NULL markiert sind, sind nicht leer
      • Datensätze, welche eine maximale Länge (SQL: VARCHAR(255)) haben, sind auch nicht länger
      • etc.

Aufgabe 5

SELECT name, country FROM manufacturers;
 
SELECT * FROM games WHERE current_status = 'Maintenance';
 
SELECT MAX(price_per_play), game_name FROM games;
 
SELECT players.first_name, players.last_name FROM players 
JOIN high_scores ON players.player_id = high_scores.player_id 
WHERE high_scores.rank_position = 1;
 
SELECT players.first_name, players.last_name, games.game_name 
FROM players 
JOIN high_scores ON players.player_id = high_scores.player_id 
JOIN games ON high_scores.game_id = games.game_id WHERE high_scores.rank_position = 1;