Archivo Explosivo: Allgemein

FIAE – Datenbanken & SQL – Diverse SQL Befehle

Definitionen
– DB – Database
– DBS – Data Base System
– DBMS – Datenbankmanagementsystem
– DBS = DB + DBMS
– Systematische Beschreibung, Speicherung und Wiedergewinnung von Datenmengen
– DB – Database/Datenbank – enthält mehrere Tabellen
– Tabelle ist die logische Zusammenfassung von Datensätzen
– Datensatz: Zusammenfassung logischer Attribute
– Attribut – Zelleninhalt – kleinste Logische Einheit
– Zeichen: Kleinste speicherbare Einheit
– …

Probleme der Datenhaltung
– Datenredundanz
– Dateninkonsistenz
– Effiziens
– Datenschutz
– Datensicherheit

Drei-Ebenen-Konzept
Externe Ebene -> Konzeptionelle Ebene -> Interne Ebene

  • Konzeptionelle Ebene: Datenmodell aus der realen Welt
    • Logische Gesamtsicht auf die Datenbank
    • Festlegung der Datenoperationen
    • Beschreibung der Beziehungen (Integritätsbedingungen)
  • Interne Ebene
    • Physische Speicherung
    • DBMS
    • Speicherlogik
    • Zugriff über konzeptionelle Ebene
    • Endanwenderzugriff über externe Ebene
  • Externe Ebene
    • Anwenderebene
    • Zugriff auf DBS mit
      • Abfragesprache (DQL – Data Query Language)
      • Datenmanipulationssprache (DML – Data Manipulation Language)
      • Anwendung

Datenbanksysteme
– Dateisysteme
– Prärelationale Datenbanken
– Relationale Datenbanken
– Postrelationale Datenbanken
– Objektorientierte Datenbanken
– Mehrdimensionale Datenbanken
– Verteilte Datenbanken
– Zeitorientierte Datenbanken
– …

Vorteile Relationaler Datenbanken
– Redundanzfreie Speicherung
– Integrierte Kontrolle auch bei verteilten Systemen
– Multiuserbetrieb
– Hohe Performance
– Datenkapselung (Veränderung der Attribute durch Methode des Objekts)
– Methoden sind Bestandteile der Objekte (Klassen)
– Nachrichtenkommunikation (Objekte rufen sich gegenseitig auf)
– Referentielle Integrität
– …

Probleme bei Redundanzen
– Update Anomalies
– Insertion Anomalies
– Deletion Anomalies
– …

Grundsätze der Modellierung
– Keine Redundanzen
– Eindeutigkeit
– Keine Prozessdaten
Datenmodelle vermeiden Komplexität

Modelle
– Hierarchisches Modell: Jedes Datenobjekt hat genau einen Vorgänger (Bis auf die oberste Ebene)
– Netzwerkorientiertes Modell: Jedes Datenobjekt hat mindestens einen Vorgänger (Bis auf die oberste Ebene)
– Relationales Modell:
– Anordnung in zweidimensionalen Tabellen
– Jede Tabelle besitzt einen eindeutigen Relationsnamen
– Alle Zeilen einer Tabelle heißen Relation
– Jede einzelne Zeile heißt Tupel (Datensatz)
– Jede einzelne Zeile wird auch als Entität bezeichnet
– Spaltennamen sind die Attributnamen
– Alle Attributsnamen heißen Relationsschema
– …

Schlüsselarten
– Natürlicher Schlüssel
– Künstlicher Schlüssel (artificial)
– Primärschlüssel
– Fremdschlüssel
– Superschlüssel
– …

ERM – Entity Relationship Model
– Entität: Gegebene Größe, Objekt
– Rechteck/Quadrat: Entity-Typ
– Kreis: Attribut
– Raute: Beziehungstyp

Relationen
– 1:1 (one to one)
– 1:n (one to many)
– n:m (many to many)
– 1:1:1 (tripplet)

Relations Notation
– Chen Er-Notation (1976)
– Oracle Notation (Krähenfußdiagramm)
– …

-- Mehrzeilige Kommentare
/* Datenbanken anzeigen */

-- Einzeilige Kommentare
#Datenbanken anzeigen

-- Neue Datenbank erstellen:
CREATE DATABASE DATENBANKNAME;

-- Verfügbare Speicher-Engines anzeigen lassen
SHOW ENGINES;

-- Alle Datenbanken anzeigen
show databases;

-- Datenbank löschen
DROP DATABASE DATENBANKNAME;

-- Aktive Datenbank festlegen   
-- use DATENBANKNAME;

-- Tabelle erstellen
CREATE TABLE TABELLENNAME (...);

-- Tabelle erstellen mit mehreren Spalten
CREATE TABLE TABELLENNAME(SPALTE1 varchar(100), SPALTE2 varchar(100), SPALTE3 date, ...);

-- Tabellen in aktueller Datenbank anzeigen
SHOW TABLES;

-- Tabellenspalten anzeigen
SHOW COLUMNS FROM TABELLENNAME;

-- Tabelle löschen
DROP TABLE TABELLENNAME;

-- Daten in Tabelle einfügen
INSERT INTO TABELLENNAME(SPALTE1, SPALTE2, SPALTE3, ...) VALUES (WERT1, WERT2, WERT3, ...);
INSERT INTO TABELLE1 SET SPALTE = WERT, SPALTE2 = WERT2, ...;

-- Kompletten Inhalt der Tabelle anzeigen
SELECT * FROM TABELLENNAME;

-- Nur bestimmte Spalten anzeigen
SELECT SPALTE1, SPALTE2, SPALTE3 FROM TABELLENNAME;

-- Doppelte Zeilen zusammenfassen
SELECT DISTINCT * FROM TABELLENNAME;

-- Alle Datensätze anzeigen
SELECT ALL * FROM TABELLENNAME;

-- Nur bestimmte Zeilen anzeigen mit WHERE-Bedingungen
SELECT * FROM TABELLENNAME WHERE SPALTE1 = WERT1;

-- Auswahl von Zeilen mit LIKE-Bedingung
SELECT * FROM TABELLENNAME WHERE SPALTE1 LIKE "WERT1%";
-- % ist ein Platzhalter für beliebige Zeichen die vorkommen können
-- _ ist ein Platzhalter für genau 1 Zeichen

-- Alle Zeilen die ein Zeichen gefolgt von einem n haben und kein n am Ende des Feldes
SELECT * FROM TABELLENNAME WHERE SPALTE1 LIKE "%_n%" AND SPALTE1 NOT LIKE "%n";

-- Alle Zeilen die ein on oder ein an enthalten und am ende kein n haben
SELECT * FROM TABELLENNAME WHERE (SPALTE1 LIKE "%on%" OR SPALTE1 Like "%an%") AND SPALTE1 NOT LIKE "%n";

-- Einschränkung der Datensätze mit BETWEEN
SELECT * FROM TABELLENNAME WHERE SPALTE1 BETWEEN 1 AND 3;

-- Einschränkung der Datensätze mit IN
SELECT * FROM TABELLENNAME WHERE SPALTE1 IN("1981-06-24","1965-05-12","1992-07-24","1904-01-13");

-- Funktion zum Zählen von Werten
SELECT COUNT(SPALTE1) FROM TABELLENNAME;

-- Datensätze gruppieren
SELECT COUNT(*),SPALTE1 FROM TABELLENNAME GROUP BY SPALTE1;

-- Sortierung von Datensätzen für die Ausgabe
SELECT * FROM TABELLENNAME ORDER BY SPALTE1;

-- absteigend sortieren
SELECT * FROM TABELLENNAME ORDER BY SPALTE1 DESC;

-- aufsteigend sortieren
SELECT * FROM TABELLENNAME ORDER BY SPALTE1 ASC;

-- Mehrere Spalten sortieren
SELECT * FROM TABELLENNAME ORDER BY SPALTE1, SPALTE2, SPALTE3 ASC;

-- Sonderfall sortieren eines Enum-Feldes (Auflistungsfeld)
SELECT * FROM TABELLENNAME ORDER BY FIELD(SPALTE1, 'Wert1','Wert2','Wert3'), Spalte2 ASC;

-- Oder:
SELECT * FROM TABELLENNAME ORDER BY CONCAT(SPALTE1),SPALTE2;

-- Nicht alle Datensätze auf einmal anzeigen mit Limit
SELECT * FROM TABELLENNAME Limit 10;

-- Anfang des Limits festlegen
SELECT * FROM TABELLENNAME Limit 5;
SELECT * FROM TABELLENNAME Limit 0,5;
SELECT * FROM TABELLENNAME Limit 5,5;
SELECT * FROM TABELLENNAME Limit 10,5;
SELECT * FROM TABELLENNAME Limit 15,5;

- Umbenennen von Tabellenspalten bei der Ausgabe
SELECT SPALTE1ALT AS SPALTE1NEU FROM TABELLENNAME;

-- Funktionen in MySQL
-- zählen
COUNT(*);
-- MaximalWert
MAX(SPALTE1);
-- MinimalWert
MIN(SPALTE1);
-- Durchschnitt
AVG(SPALTE1);

-- Nur das Jahr anzeigen
SELECT DAY(SPALTE1) AS Tag, MONTH(SPALTE1) AS Monat, YEAR(SPALTE1) AS SPALTE1NEU FROM TABELLENNAME;

-- Datum formatieren
SELECT Name, DATE_FORMAT(SPALTE1,"%d.%m.%Y") AS datum FROM TABELLE WHERE SPALTE1 IS NOT NULL;

-- Einfache Abfragen über mehrere Tabellen
-- Wenn Spaltennamen bei mehreren Tabellen gleich sind schreibt man den Tabellennamen und einen Punkt davor

SELECT * FROM TABELLE1, TABELLE2;
SELECT * FROM TABELLE1, TABELLE2 WHERE BEDINGUNG1 = ERFÜLLUNG1 AND BEDINGUNG2 = ERFÜLLUNG2;

-- JOINS
-- INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN, NATURAL JOIN, CROSS JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN, 
-- Classic Join
SELECT * FROM TABELLE1, TABELLE2 WHERE BEDINGUNG1 = ERFÜLLUNG1;
SELECT * FROM TABELLE1, TABELLE2, TABELLE3 WHERE TABELLE1.SPALTE1 = TABELLE2.SPALTE2 AND TABELLE1.SPALTE1 = TABELLE3.SPALTE3;

-- Inner Join
SELECT * FROM TABELLE1 INNER JOIN TABELLE2 ON TABELLE1.SPALTE1 = TABELLE2.SPALTE2;

-- LEFT JOIN
SELECT * FROM TABELLE1 LEFT JOIN TABELLE2 ON TABELLE1.SPALTE1 = TABELLE2.SPALTE2;

 -- Löschen von Datensätzen
 -- Achtung kein Undo möglich
 DELETE FROM TABELLE WHERE BEDINGUNG = ERFÜLLUNG;

-- Zeilen aus verschiedenen Datenbanktabellen zusammenfügen
SELECT SPALTE1, SPALTE2 FROM TABELLE1 UNION SELECT SPALTE3,SPALTE4 FROM TABELLE2;

-- ...oder mehrere Abfragen auf eine Tabellen zusammenfügen
SELECT SPALTE1, SPALTE2 FROM TABELLE1 WHERE BEDINGUNG1 = ERFÜLLUNG1 UNION SELECT SPALTE3, SPALTE4 FROM TABELLE2 WHERE BEDINGUNG2 = ERFÜLLUNG2;

-- Unterabfragen
SELECT * FROM TABELLE1 WHERE BEDINGUNG1 = (SELECT MAX(SPALTE2) FROM TABELLE1);
SELECT (SELECT max(SPALTE1) FROM TABELLE1) AS "Neuer Bezeichner" ,SPALTE2,SPALTE3 FROM TABELLE1;
SELECT *,concat(ROUND(SPALTE1/(SELECT MAX(SPALTEX) FROM TABELLE1)*100, 0), "%") AS 'Neuer Bezeichner' FROM TABELLE1;

-- ErzeugerCode einer Tabelle anzeigen
SHOW CREATE TABLE TABELLE1;

-- Zeichenkodierung in Mysql umstellen
SET NAMES "CP850";

-- Variablen von MySQL anzeigen
SHOW VARIABLES;

-- Nachträgliches anpassen von Tabellenstrukturen (Datentyp)
ALTER TABLE TABELLE1 MODIFY SPALTE DATENTYP(DEFINITION);

-- Umbenenen von Spalten
ALTER TABLE TABELLE1 CHANGE SPALTE-ALT SPALTE-NEU DATENTYP(DEFINITION);

-- Hinzufügen einer neuen Spalte nach einer anderen Spalte
ALTER TABLE TABELLE1 ADD NEUE-SPALTE DATENTYP(DEFINITION) NOT NULL DEFAULT 0 AFTER ALTE-SPALTE;

-- Index erstellen
CREATE INDEX INDEXNAME ON TABELLE1(SPALTE1);

-- Index löschen
DROP INDEX INDEXNAME ON TABELLE1;

-- Rechtevergabe
GRANT SELECT ON DATENBANK.TABELLE TO BENUTZERNAME@HOST;

-- Neuer Benutzer
CREATE USER 'BENUTZERNAME'@'%' IDENTIFIED BY 'PASSWORT';

-- Rechte für den neuen Benutzer angeben
GRANT ALL ON DATENBANK.* TO BENUTZERNAME@'%';
GRANT ALL ON *.* TO BENUTZERNAME@'%';

-- Rechtetabelle neu einlesen
FLUSH PRIVILEGES;

-- Rechte anzeigen
SHOW GRANTS;
SHOW GRANTS FOR BENUTZERNAME@HOST;

-- Rechte entziehen
REVOKE SELECT ON DATENBANK.* FROM BENUTZERNAME@HOST;
REVOKE ALL ON *.* FROM BENUTZERNAME@HOST;

-- Transaktionen
START TRANSACTION;
SELECT * FROM TABELLE1;
SELECT * FROM TABELLE2;
COMMIT;

START TRANSACTION;
UPDATE TABELLE1 SET wert = wert - 500 WHERE BEDINGUNG = ERFÜLLUNG;
UPDATE TABELLE2 SET wert = wert + 500 WHERE BEDINGUNG = ERFÜLLUNG;
SELECT * FROM TABELLE1;
SELECT * FROM TABELLE2;

-- Transaktion rückgängig machen
ROLLBACK;

-- It's a kind of magic... ;-)
SELECT DISTINCT
titel.nummer AS 'Track',
titel.name  AS 'Titel', 
album.bezeichnung AS 'Album', 
label.name AS 'Label', 
interpret.name AS 'Künstler',
genre.bezeichnung AS 'Genre'
FROM album
LEFT JOIN titel ON album.ean = titel.album_ean
LEFT JOIN interpret ON interpret.id = titel.interpret_id 
LEFT JOIN label ON album.ean = label.album_ean
LEFT JOIN genre ON genre.bezeichnung = titel.genre_bezeichnung
WHERE interpret.name LIKE '%Pink%'
ORDER BY titel.id ASC;

Weiterer Artikel zu Datenbanken:blog.phaziz.com/fiae-oop-objektorientierte-programmierung-normalisierung-in-relationalen-datenbanken/

MySQL Dokumentation: dev.mysql.com/doc/

Permalink
26. Januar 2017
AllgemeinFIAEMySQLProgrammierung
Archivo Explosivo: Allgemein
subnetting

Subnetting – FIAE

Ein Ausgangsnetz wird in eine bestimmte Anzahl Subnetze aufgeteilt. Welche IP-Adressen haben die Subnetze? Wieviel Hosts können in jedem dieser neuen Subnetze adressiert werden?

gegeben: IP-Adresse des Ausgangsnetzes: 10.120.23.0 /24
Anzahl der zu bildenden Subnetze: 8
gesucht: IP-Adressen der Subnetze
Anzahl der möglichen Hosts in jedem Subnetz

Ausgangssituation 10. 120. 23. 0 /24
00001010. 01111000. 10111000. 00000000

Erweiterung um 3 Bits für 8 weitere Subnetze:

SN1 00001010. 01111000. 10111000. 00000000
10. 120. 23. 0 /27
SN2 00001010. 01111000. 10111000. 00100000
10. 120. 23. 32 /27
SN3 00001010. 01111000. 10111000. 01000000
10. 120. 23. 64 /27
SN4 00001010. 01111000. 10111000. 01100000
10. 120. 23. 96 /27
SN5 00001010. 01111000. 10111000. 10000000
10. 120. 23. 128 /27
SN6 00001010. 01111000. 10111000. 10100000
10. 120. 23. 160 /27
SN7 00001010. 01111000. 10111000. 11000000
10. 120. 23. 192 /27
SN8 00001010. 01111000. 10111000. 11100000
10. 120. 23. 224 /27

Abstand zwischen den Subnetzen: 5 Bits = (2^5)=32 IP-Adressen
Ergebnis der adressierbaren Hosts: (32-2)=30 IP-Adressen je Subnetz

Permalink
11. Oktober 2016
AllgemeinFIAE
Archivo Explosivo: Allgemein

Wing CSS

Wing-CSS – ein paar (ausreichende) CSS-Elemente für kleinere Projekte – Grid, Typografie, Buttons, Forms, Listen und ein paar Helfer-Klassen.

Archivo Explosivo: Allgemein
antibox

Epic Favicon Generator

…Immer noch besser als hunderte 404 Meldungen im Webserver Logfile. Hier geht es zum Epic Favicon Generator von

Generate 20 Favicon Sizes, 21 Icons, w/ 21 Tags!

Permalink
11. September 2015
Allgemein
Archivo Explosivo: Allgemein
ConstructrCMS - Rechteverwaltung

ConstructrCMS – Benutzerverwaltung

ConstructrCMS - Benutzerverwaltung

In der Benutzerverwaltung finden Sie eine Übersicht aller angelegten Benutzer in ConstructrCMS. Hier können Sie angelegte Benutzer editieren, Benutzer löschen und neue Benutzer anlegen. Vorsicht: Alle Änderungen an bestehenden Benutzern, werden sofort wirksam. Ändern Sie zum Beispiel bei Ihrem Benutzer (mit dem Sie gerade in ConstructrCMS angemeldet sind) das Passwort, werden Sie automatisch ausgelogged und müssen sich mit den neuen Benutzerdaten erneut am System anmelden.

ConstructrCMS - einen Benutzer editieren

Änderungen der Benutzerrechte (über das entsprechende Icon in jeder Zeile) werden sofort wirksam. Es ist also unklug, sich selber die Rechte für das Bearbeiten von Benutzerkonten zu entziehen.

Benutzer können über das entsprechende ICON aktiviert und deaktiviert werden – VORSICHT: Diese Änderungen werden sofort wirksam – also nicht den eigenen Benutzer sperren, solange kein anderer Benutzer angelegt worden ist. Ansonsten muss die Datenbank manuell bearbeitet werden (constructr_user / constructr_user_active, Wert von 0 – inaktiv – auf 1 – aktiv – ändern) um wieder Zugriff auf das Backend zu erhalten.

ConstructrCMS - Rechteverwaltung

Über die hinterlegte eMail-Adresse wird Ihnen das Passwort zugesendet, im Falle eines Zurücksetzen der Benutzer.

Archivo Explosivo: Allgemein
Trauriger Karton

Karton ist traurig…

Trauriger Karton…

Archivo Explosivo: Allgemein
Vogel in SW

Vogel in Schwarz/Weiß

Archivo Explosivo: Allgemein

Kostenloses C# eBook

Kostenlos…gegen Abgabe der persönlichen Daten, gibt es hier von Syncfusion ein kostenloses eBook zum Thema C#.
Aus dem Inhalt:

  • Introducing C# and .NET
  • Coding Expressions and Statements
  • Methods and Properties
  • Writing Object-Oriented Code
  • Handling Delegates, Events, and Lambdas
  • Working with Collections and Generics
  • Querying Objects with LINQ
  • Making Your Code Asynchronous
  • Moving Forward and More Things to Know
Archivo Explosivo: Allgemein

Microsoft EDGE Browser schneller als die Alternativen

Edge-Browser

Das wird noch interessant – Zitate aus dem Microsoft-Blog:

On WebKit Sunspider, Edge is 112% faster than Chrome

On Google Octane, Edge is 11% faster than Chrome

On Apple JetStream, Edge is 37% faster than Chrome

Hier der Link zum Microsoft Entwickler Blog.

Archivo Explosivo: Allgemein

Ich mag Spam…

…bringt mich manchmal richtig zum Lachen. Betreff: „Hier findest Du Kontakt aus Beijing“ Erster Satz: „Achtung – Diese Website könnte Nacktbilder aus deiner Nachbarschaft enthalten…“…, dabei wohne ich nicht mal in der Nähe von Beijing ;)

1 2