Friendzone Advanced¶
Note
11.12.25 Version 1
Wir hatten die Tabellen likes und follows.
Und haben sie so verbessert:
Hier der verbesserte Code zusammengeführt von jeder Gruppe:
CREATE DATABASE IF NOT EXISTS friendzone_adv;
USE friendzone_adv;
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255) NOT NULL UNIQUE,
email VARCHAR(255) NOT NULL UNIQUE CHECK (email REGEXP '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$'),
password VARCHAR(255) NOT NULL CHECK (CHAR_LENGTH(password) >= 8),
name VARCHAR(255),
bio TEXT,
gender VARCHAR(50),
birthday DATE,
city VARCHAR(255),
country VARCHAR(255),
centimeters INT,
avatar VARCHAR(255),
role VARCHAR(255),
is_active BOOLEAN DEFAULT TRUE,
remember_token VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS photos (
photo_id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
description VARCHAR(255) NOT NULL,
url VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS tags (
id INT AUTO_INCREMENT PRIMARY KEY,
photo_id INT NOT NULL,
name VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (photo_id) REFERENCES photos(photo_id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS likes (
id INT AUTO_INCREMENT PRIMARY KEY,
photo_id INT NOT NULL,
user_id INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (photo_id) REFERENCES photos(photo_id) ON DELETE CASCADE,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS follows (
following_id INT NOT NULL,
follower_id INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (following_id, follower_id),
FOREIGN KEY (following_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (follower_id) REFERENCES users(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS comments (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
photo_id INT NOT NULL,
body VARCHAR(500) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (photo_id) REFERENCES photos(photo_id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS password_resets (
email VARCHAR(255) NOT NULL CHECK (email LIKE '%_@_%.__%'),
token VARCHAR(255) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (email, token)
);
CREATE TABLE IF NOT EXISTS ads (
id INT AUTO_INCREMENT PRIMARY KEY,
priority INT NOT NULL CHECK (priority >= 0),
name VARCHAR(255) NOT NULL,
type ENUM('banner', 'popup', 'text') NOT NULL,
url VARCHAR(255) NOT NULL CHECK (url LIKE 'http%://%'),
img VARCHAR(255),
query TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS analytics (
id INT AUTO_INCREMENT PRIMARY KEY,
ip VARCHAR(45) NOT NULL,
device VARCHAR(255),
brand_family VARCHAR(255),
brand_model VARCHAR(255),
browser_family VARCHAR(255),
browser_version VARCHAR(50),
platform_family VARCHAR(255),
platform_version VARCHAR(50),
user_id INT,
photo_id INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL,
FOREIGN KEY (photo_id) REFERENCES photos(photo_id) ON DELETE SET NULL
);
Hier sind die Tabellen die ich erstellt habe:
Danach haben wir die verschiedenen Daten importiert. Bei der sql Datei kann man es einfach rein ziehen und dann den folgenden Befehl aussführen:
BILD
Bei einer csv-datei muss man es so machen:
danach kann man die Datei auswählen die man benutzen will:
Probleme:¶
Wir hatten bei den einten Daten einen Fehler nähmlich das die Datumsdaten 0000-00-00 00:00:00 waren was natürlich nicht sein darf. Deshalb haben wir diese einfach angepasst sodass sie funktionieren. Das darf man eigentlich nicht aber wir "lernen" ja noch.
Dummy Daten:¶
Die Daten habe ich alle eingefügt. Bei der ads Datei bin ich jetzt stecken geblieben.
Wichtig ist auf jeden fall, dass ich immer schaue, ob die ID's überein stimmen und die Fremdschlüssel richtig verlinkt sind.
Doku DB Employees¶
Ausgangslage:
Hier geht es um „Employees“. Die Beispieldatenbank „Employees“ wurde von Patrick Crews und Giuseppe Maxia entwickelt und bietet eine Kombination aus einer großen Datenbasis (ca. 160 MB), die auf sechs separate Tabellen verteilt ist und insgesamt 4 Millionen Datensätze enthält. Die Struktur ist mit einer Vielzahl von Speichermodultypen kompatibel. Über eine enthaltene Datendatei wird auch Unterstützung für partitionierte Tabellen bereitgestellt. Zusätzlich zu den Basisdaten enthält die Datenbank „Employees“ auch eine Reihe von Tests, die über die Testdaten ausgeführt werden können, um die Integrität der geladenen Daten sicherzustellen. Dies sollte dazu beitragen, die Qualität der Daten während des ersten Ladens sicherzustellen, und kann nach der Verwendung verwendet werden, um sicherzustellen, dass während des Tests keine Änderungen an der Datenbank vorgenommen wurden.
Modell DB¶
Wir haben über Gitlab eine Zip_datei heruntergeladen und diese ausgeführt und über den Datei_Explorer ein Commandfenster geöffnet.(cmd)
im Terminal haben wir dann diesen Befehle eingegeben:
dann musste ich mein Passwort eingeben um fortzufahren:
dann habe ich diese ausgabe bekommen:
+-----------------------------+
| INFO |
+-----------------------------+
| CREATING DATABASE STRUCTURE |
+-----------------------------+
+------------------------+
| INFO |
+------------------------+
| storage engine: InnoDB |
+------------------------+
+---------------------+
| INFO |
+---------------------+
| LOADING departments |
+---------------------+
+-------------------+
| INFO |
+-------------------+
| LOADING employees |
+-------------------+
+------------------+
| INFO |
+------------------+
| LOADING dept_emp |
+------------------+
+----------------------+
| INFO |
+----------------------+
| LOADING dept_manager |
+----------------------+
+----------------+
| INFO |
+----------------+
| LOADING titles |
+----------------+
+------------------+
| INFO |
+------------------+
| LOADING salaries |
+------------------+
dann haben wir die daten überprüft und bei mir hat es diesen output gegeben:
es hat also 02:16 gebraucht um alle Daten zu checken








