2011-01-15 4 views
2

Hey alle zusammen. Ich bereite mich derzeit auf meine Prüfungen vor und möchte einige Beispiele für benutzerdefinierte Integritätsregeln in Datenbanksystemen kennen. Soweit ich weiß, bedeutet das, dass ich bestimmte Bedingungen für die Spalten festlegen kann und wenn Daten eingefügt werden, muss es diese Bedingungen erfüllen.Beispiel einer benutzerdefinierten Integritätsregel in Datenbanksystemen?

Zum Beispiel: wenn ich eine Regel aufstelle, dass eine ID NUR aus 5 ganzen Zahlen bestehen muss, dann wenn ich eine Zeile mit ID aus ganzen Zahlen und einigen Zeichen einfüge, dann akzeptiert sie es nicht und gibt ein zurück Error.

Kann mir jemand bestätigen und mir eine Meinung dazu geben? Vielen Dank im Voraus!

Antwort

6

Ja, das ist die ganze Idee einer Datenbank, wie zu einer unkontrollierten Datenspeicherstelle entgegen.

Sie sind nicht benutzerdefiniert, sie sind Data Modeller oder Datenbankadministrator oder Datenbankeigentümer (alle spezifischen Begriffe) definiert. Wenn du es den Benutzern oder den Entwicklern überlassen hast, würden sie den kostenlosen Müll oder das Internet lesen und ein Monster implementieren.

Die Idee einer Datenbank, seit über 30 Jahren, ist, dass die gesamte Definition dafür innerhalb der Datenbank ist. Während dieser Zeit gab es viele Standards (von internationalen Standardisierungsgremien, nicht von einzelnen Anbietern oder Anbietern von Software), die schrittweise verschiedene Standards zur Erhöhung der Integrität von Datenbanken identifiziert haben. Die SQL-Anbieter haben sie implementiert (ok, nicht die Freeware-Mob, aber sie bieten keine ISO/IEC/ANSI-SQL; und sie sind betrügerisch in der Verwendung des Standardbegriffs "SQL" in diesen Produkten).

Im Standard-SQL, haben wir die folgende, als Erklärungen (dh nicht Code außerhalb der Datenbank, nicht Trigger.):

  • referentielle Integrität. Die übergeordnete Zeile, auf die sich das untergeordnete Element bezieht, muss vorhanden sein, bevor die untergeordnete Zeile eingefügt werden kann. Das ist die Definition der Beziehung, also gibt es keine Verdoppelung.

  • Datenintegrität. Verschiedene Formen:

    • Zuerst sicherstellen, dass der richtige Datentyp verwendet wird. Konsequent. Das eliminiert das Einfügen von Zeichenwerten in Ganzzahlspalten. 10-stellige Werte in 4-stelligen Spalten usw.
    • REGELN. Diese sorgen dafür, dass alle Regeln für die Spalte (wie Ihr Beispiel) eingehalten werden.
    • CHECK Constraints. Diese erlauben, dass Spaltenwerte gegen andere Spalten überprüft werden, bevor Einfügung erlaubt wird. Sie können einfach oder komplex sein.
    • (mit Triggern können Sie weitere Einschränkungen implementieren, die die obigen Deklarationen nicht liefern) .
  • Transaktionale Integrität. Dies stellt sicher, dass die Integrität zwischen Zeilen in verschiedenen Tabellen beibehalten wird und auf die Daten Verlass ist.
  • Ich wiederhole, wenn es diese Grundlagen nicht implementiert (auf jeder Spalte), ist es keine Datenbank, es ist nur ein Speicherort, für Daten, die keine Integrität hat.

    Sie können dies leicht überprüfen, indem Sie einige Standard-SQL-Handbücher oder den SQL-Standard selbst (beide kostenlos im Internet verfügbar) überprüfen.

    Alle Informationen im Gegensatz zu den oben genannten, im Internet gefunden, ist es nicht wert, darauf zu reagieren.

  • Jeder Verrücker mit einer Tastatur und einer Verbindung kann heutzutage alles veröffentlichen. Wiki wird von unqualifizierten Amateuren geschrieben, und die "Definitionen" ändern sich jede Woche, da etwas weniger unqualifizierte Amateure sie bearbeiten.
  • Die meisten von ihnen schreiben über das, was sie glauben, ohne jede tatsächliche Erfahrung, Prüfung oder Überprüfung ihrer Überzeugungen.

Es ist Zeitverschwendung, mit Standards zu argumentieren; sie haben einen Zweck; sie wurden von Köpfen geschaffen, die größer waren als unsere; und sie sind lange (30 Jahre!) von größeren Organisationen und Regierungen akzeptiert (gefordert) worden. Kleine Organisationen können Zeit sparen, indem sie diese Standards einhalten, anstatt den Glauben zu behalten, dass sie irgendwie "anders" sind. Wir beschäftigen uns in dieser Branche mit physikalischer Wissenschaft und Technologie, nicht mit magischem Denken.

Business Rules in der Application Layer

  1. Nun, wenn Sie die Regeln in dem Server setzen, werden sie vom Server garantiert. Ich würde jeden Tag darauf vertrauen, dass jede Anwendungsschicht fehlerfrei ausgeführt wird, insbesondere eine, die von Leuten geschrieben wurde, die Datenbanken nicht verstehen, oder deren Zweck.

  2. Datenbanken sollen völlig unabhängig von den Anwendungen (beachten Sie den Plural), die sie verwenden. Es wäre albern, diese Regeln in fünf Apps anstatt in einem Ort in der Datenbank zu platzieren. Was passiert, wenn sich die Regeln ändern? Kann jemand garantieren, dass alle Apps korrekt und einheitlich aktualisiert werden?

  3. Denken Sie auch daran, dass es sich bei Daten um Unternehmensdaten und nicht um Abteilungsdaten handelt. Das Unternehmen implementiert Standards, so dass sie vermeiden können, dass die Abteilungsadministratoren Zeit verlieren, wenn sie vor 30 Jahren dumme Argumente außerhalb ihrer Abteilung haben.

Wieder Entsendung Menschen, was sie denken, als ob sie die erste Person durch diesen Denkprozess ohne Abschluss, gehen waren (was sie sind von Standards bewusst bedeuten würde) oder Verständnis oder tatsächliche Erfahrung (was würde ändere ihre Überzeugungen sehr schnell).

Daher: Alle Geschäftsregeln, die sich auf Daten beziehen, in irgendeiner Form oder Form, sollten mit den Daten im IEC/ISO/ANSI-Standardkatalog in der Datenbank platziert werden.

Jede Geschäftslogik (abhängig von App und Nutzung) kann überall dort platziert werden, wo sich das Unternehmen entscheidet. Auf diese Weise wird die Integrität des Unternehmensvermögens erhalten, und der Schaden ist auf die Abteilung begrenzt, die magisches Denken hegt.

+0

danke für diese umfassende antwort :) – Pavel

+0

@Pavel. Gern geschehen! – PerformanceDBA

+1

@PerformanceDBA Sie haben einen sehr beredten Fall gemacht, danke. Würden Sie mir bitte etwas Vertrauenswürdiges empfehlen, abgesehen von den von Ihnen erwähnten Standards, zu diesem Thema zu lesen? –

1

Dies sind CHECK-Einschränkungen in Oracle, definieren Sie sie wie folgt:

alter table mytable add constraint mytable_id_chk check (length(id) = 5); 
+0

... aber es gibt mindestens eine Meinung, die besagt, dass Sie keine * Integritätsbedingungen in Datenbank außer Fremdschlüsseln verwenden sollten, und dabei sollten Sie Ihre Geschäftslogik streng in die Business-Schicht einfügen. Werfen Sie einen Blick auf: http://www.codeproject.com/KB/architecture/DudeWheresMyBusinessLogic.aspx –

+1

@Andy - Die Datenbank sollte keine Eingabe von einer darüber liegenden Ebene vertrauen. Das bedeutet, dass Datenintegritätsregeln erneut überprüft werden müssen. Wenn Sie keine Integritätsprüfung in die Datenbank stellen, verhindert nichts, dass jemand die mittlere Schicht umgeht und eine Reihe von Daten direkt veröffentlicht, was gegen die Geschäftsregeln verstößt. – Thomas

+0

@Thomas - Ich denke, das sollte durch die Unternehmensregeln auf Verwaltungsebene geregelt werden. Wenn jemand die Business-Schicht umgehen und die Daten direkt ändern könnte, könnte er auch die Einschränkungen einfach deaktivieren und alles tun, was er benötigt. Sie können nicht einfach alle Geschäftsregeln in der DB implementieren, da sie sehr komplex sein können - warum also mit den Prüfungen umgehen? –

1

MySQL nicht noch ehren Einschränkungen prüfen. Es analysiert sie in einer Create Table-Anweisung, beachtet sie jedoch nicht. Daher müssen Sie in MySQL Datenintegritätsregeln der in einem Trigger genannten Art implementieren.

Check-Constraints sind das richtige SQL-Tool zum Implementieren von Datenintegritätsprüfungen der von Ihnen genannten Art. Die meisten größeren Anbieter (DB2, SQL Server, Postgres und Yes Oracle) implementieren Check-Einschränkungen und berücksichtigen diese. Einige Arten von Einschränkungen, z. B. solche, die eine Abfrage an eine andere Tabelle oder komplexe Logik erfordern, können jedoch nur in Triggern implementiert werden.

Maintaining Data Integrity Through Constraints

Data Integrity