MySQL Datenbank Design Standard

2018-01-26 00:00:00 IN1 , 2023-04-10 14:16:29 IN1


Übersicht

  1. Globale-Regeln
  2. Datenbank (Database)
  3. Tabelle
  4. Table-Constraint
  5. Feld / Spalte (Column)
  6. Schlüssel und Index (Key and Index)
  7. Beziehungen (Relationship)
  8. Physische Speicherung
  9. View
  10. Anhang

1. Globale Regeln

  1. Wenn derselbe Name in mehreren Schemata existiert, muss er die gleiche Sache, die gleiche Sicht auf Daten repräsentieren oder Daten auf die gleiche Weise manipulieren.
  2. Datenbankobjektregeln haben Vorrang vor globalen Regeln, wenn es Überschneidungen gibt oder wenn die globale Regel für das Datenobjekt angepasst wird.
  3. Insbesondere gelten folgende Normalisierungsregeln:
    1. Erste Normalform
      • Eliminierung von Wiederholungsinformationen
      • Erstellen separater Tabellen für relationale Daten (Stichwort "Relationstabelle")
      • Verwende Primärschlüssel, um jeden Datensatz zu identifizieren.
    2. Zweite Normalform
      • Erstelle separate Tabellen für jeden Satz von Bezugsdaten. Hier werden viele-zu-viele Beziehungen normalisiert.
      • Verwenden von Fremdschlüsseln zur Verknüpfung von Bezugstabellen
    3. Dritte Normalform
      • Eliminieren von Feldern, die sich nicht auf den Primärschlüssel beziehen

2. Datenbank (Database)

  1. Benamung
    1. Englisch
    2. Kleinschreibung
    3. CamelCase
    4. Allein zulässige Zeichen sind: a) Buchstaben a-z A-Z, b) Zahlen 0-9, c) Unterstrich _
  2. Jedes generierte Schema innerhalb einer Datenbank muss mindestens eine Tabelle enthalten.

3. Tabelle (Table)

  1. Benamung
    1. Englisch
    2. Kleinschreibung
    3. CamelCase
    4. Allein zulässige Zeichen sind: a) Buchstaben a-z A-Z, b) Zahlen 0-9, c) Unterstrich _
  2. Die Schlüsselvereinheitlichung darf nicht in einem physischen Schema erfolgen und muss spätestens im physischen Entwurfsschritt des Datenbankdesigns aufgelöst werden.
  3. Alle Tabellen müssen mindestens eine Spalte haben.
  4. Allen Tabellen müssen geschätzte volumetrische Informationen zugeordnet werden, die für das erste Jahr der Verwendung gelten.
  5. Alle Tabellen müssen Primärschlüsselspalten enthalten.
  6. Alle Tabellen müssen je eine Erstellungs- und eine und Änderungs-Zeitstempel-Spalte aufweisen (siehe 5. Felder / Spalten (Column)).

4. Table Constraint

  1. Constraints müssen die SQL-Syntax verwenden, wie sie durch die ANSI SQL92 oder neuere Standards definiert ist.
  2. Keine Implementierung von Ver- oder Entschlüsselung auf Spaltenebene. (s. "Datenbankinhalte AES verschlüsseln mit MySQL")

5. Feld / Spalte (Column)

  1. Benamung

    1. Englisch
    2. Kleinschreibung
    3. CamelCase
    4. Allein zulässige Zeichen sind: a) Buchstaben a-z A-Z, b) Zahlen 0-9, c) Unterstrich _
  2. Jeder Spaltendatentyp muss aus der autorisierten Liste der berechtigten Datentypen ausgewählt werden.

  3. Keine Verwendung aller möglichen Datentypen der Datenbankplattform. Die Beschränkung auf autorisierte Datentypen ermöglicht eine konsistente Implementierung und langfristige Performance-Vorteile.

  4. Jeder Datentyp einer Fremdschlüsselspalte (Kind-Spalte) muss mit dem Datentyp der beitragenden Spalte (Eltern-Spalte) übereinstimmen (Parent/Child Verhältnis).

  5. Tabellenspalten dürfen nicht als IDENTITY-Spalten definiert werden.

  6. Namen dürfen nur den Spaltenbeschränkungen zugewiesen werden, die für Spalten definiert sind, für die Anwendungsregeln ein bestimmtes Verhalten oder bestimmte Werte vorschreiben.

  7. Jede Spalte muss die gleiche Datentypdefinition für alle Vorkommen der Spalte in der Datenbank haben.

  8. Spalten müssen in der folgenden Reihenfolge angeordnet sein, um die Effizienz der Datenbankprotokollierung zu gewährleisten:

    1. Primärschlüsselspalten
    2. Häufig geänderte Werte
    3. Selten geänderte Werte
    4. Sehr große Spalten, bspw. VARCHAR(2000)
    5. Änderungs-Zeitstempel
    6. Erstellungs-Zeitstempel
  9. Standard Bezeichner: siehe A) Liste der berechtigten Datentypen

  10. Nicht zulässige Bezeichner: siehe Keywords and Reserved Words

  11. Pflichtfelder/-spalten

    1. id

      Typ Kollation Attribute Null Standard Extra
      int(11) UNSIGNED Nein AUTO_INCREMENT
    2. changeStamp

      Typ Kollation Attribute Null Standard Extra
      timestamp on update CURRENT_TIMESTAMP Nein CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    3. createStamp

      Typ Kollation Attribute Null Standard Extra
      datetime Nein 0000-00-00 00:00:00
  12. SQL Beispiel-Tabelle

    --
    -- Tabellenstruktur für Tabelle `dbDesignStandard`
    --        
    CREATE TABLE IF NOT EXISTS `dbDesignStandard` (
      `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
      `amount` decimal(15,0) NOT NULL,
      `area` decimal(7,0) NOT NULL,
      `bitwise` blob NOT NULL,
      `circumference` decimal(7,0) NOT NULL,
      `code` char(8) COLLATE utf8_bin NOT NULL,
      `comment` varchar(255) COLLATE utf8_bin NOT NULL,
      `count` int(11) NOT NULL,
      `dateA` date NOT NULL,
      `changeStamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      `createStamp` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
      PRIMARY KEY (`id`),
      UNIQUE KEY `id` (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='DbDesignStandard';
    
    --
    -- Daten für Tabelle `dbDesignStandard`
    --        
    INSERT INTO `dbDesignStandard` (`id`, `amount`, `area`, `bitwise`, `circmference`, `code`, `comment`, `count`, `dateA`, `changeStamp`, `createStamp`) VALUES
    (1, '999999999999999', '9999999', '', '9999999', 'ABCDEFGH', 'Foo sagt: "Schau Bar - Dies ist ein Kommentar."', 2147483647, '0000-00-00', '2018-01-26 14:38:04', '0000-00-00 00:00:00');

6. Schlüssel und Index (Key and Index)

  1. Jeder Index muss mindestens eine Spalte enthalten.
  2. Jede Tabelle muss einen Primärschlüsselindex enthalten.
  3. Jede Tabelle muss eine Primärschlüsselbeschränkung enthalten (meint etwa Eindeutigkeitsbeschränkung, bspw. via Schlüsselwort UNIQUE durchsetzbar).
  4. Jeder Fremdschlüssel muss eine Fremdschlüsselbeschränkung enthalten.
  5. Überlappende Indizes dürfen nicht erzeugt werden.
  6. Die Spaltenreihenfolge der Primärschlüssel-Indexspalten muss mit der Reihenfolge der Spalten in der Tabelle übereinstimmen, aus denen der Primärschlüssel besteht.
  7. Die Reihenfolge der Fremdschlüsselspalten muss mit der Spaltenreihenfolge der Tabelle übereinstimmen, die den Fremdschlüssel beisteuert.

7. Beziehungen (Relationship)

  1. Jede identifizierende Beziehung darf keine Nullen in der/den untergeordneten Fremdschlüsselspalte(n) zulassen.
  2. Jede Beziehung muss gültige Eltern- und Kindtabellen haben.
  3. Viele-zu-Viele-Beziehungen sollen nicht entstehen.
  4. Jede Beziehung muss durchsetzbar sein.

8. Physische Speicherung

  1. Physische Speicherdateinamen und -zuweisungen werden von den zuständigen Fachabteilungen vergeben (Admins).
  2. Jedes physische Design muss mindestens zwei Speicherdateien enthalten:
    1. Primäre Standard-Dateigruppe, die verwendet wird, um alle implementierten physischen Objekte zu speichern.
    2. Datenbankprotokoll
  3. Die primäre Dateigruppe soll eine primäre Datendatei haben.
  4. Unbedingt bevorzugter Zeichensatz/Kollation der Datenbank Engine: UTF-8.

    1. Konfiguration von MySQL: Editieren der my.cnf-Datei, die sich normalerweise in /etc/my.cnf oder /etc/mysql/my.cnf befindet (Linux). Füge folgende Zeilen zu den entsprechenden Abschnitten hinzu:

      [client]
      loose-default-character-set = utf8
      
      [mysql]
      loose-default-character-set = utf8
      
      [mysqld]
      collation-server = utf8_unicode_ci
      loose-default-character-set = utf8
      character-set-server = utf8
      init-connect = 'SET NAMES utf8'
      skip-character-set-client-handshake    

9. View

  1. Jeder View muss mindestens eine (1) Spalte enthalten, die aus einer Tabelle oder einem anderen View in der Datenbank abgerufen wird.

10. Anhang

A) Liste der berechtigten Datentypen

Bezeichner Typ Länge Verwendung Beispiel
id INT 11 Primärschlüssel, ausschließlich
amount DECIMAL 15 Geldwerte, Anzahl
area DECIMAL 7 Umfang
bitwise BIT 0 Binär
blobwise BLOB 0 Binär
binwise BINARY 0 Binär
circumference DECIMAL 7 Umfang
code CHAR <=8
comment VARCHAR 255 Kommentar
count INT 11
date* DATE 0 Datum dateA, dateB, dateEntry
depth DECIMAL 7 Tiefe, Grad
description VARCHAR 255 Beschreibung
distance DECIMAL 7 Entfernungsangabe
height DECIMAL 7 Höhenangabe
identifier CHAR 8
length DECIMAL 7 Längenangabe
name VARCHAR 255 Bezeichner, Name, Wert Tabelle ist "Company"; Feld "name" allein steht für Firmenname. Falsch wäre: "companyName"
numerus DECIMAL 7 Zahl
" INT 11 Zahl
key VARCHAR 255 Bezeichner, Schlüssel
value VARCHAR 255 Wert
changeStamp TIMESTAMP 0 Änderungs-Zeitstempel
createStamp DATETIME 0 Erstellungs-Zeitstempel 2018-05-01
*Stamp TIMESTAMP 0 *-Zeitstempel lastStamp, newStamp, joinedStamp

Links

This website uses Cookies to provide you with the best possible service. Please see our Privacy Policy for more information. Click the check box below to accept cookies. Then confirm with a click on "Save".