2012-03-29 3 views
0

Ist es möglich, eine Einschränkung wie folgt zu definieren:definiert DB Constraint

A <- SELECT Enrolment course = x AND student = y 
B <- PROJECT A OVER student 
COUNT(B) < 3 

Ich bin besonders interessiert an dem „AND“ Teil. Ich weiß aus meinen Büchern, dass der Rest in Ordnung ist.

Die Syntax basiert auf Codd [1] und gilt nicht für ein bestimmtes DBMS.

Quellen:

  1. http://en.wikipedia.org/wiki/Relational_algebra

Antwort

1

Mit einem Zwang, nein, nicht im Allgemeinen. Das ist ein bisschen komplex für eine Einschränkung.

Wenn Sie so etwas wollen, müssen Sie in der Regel auf Trigger zurückgreifen, die in der Regel beliebig komplexen Code ausführen können. Ein Trigger vor dem Einfügen und vor dem Update, vorausgesetzt, Ihr DBMS hat sie, sollte den Trick tun.

Bitte beachten Sie, dass löst an Sicherheit grenzender Wahrscheinlichkeit eine Auswirkung auf die Leistung haben, und sie sollten nur verwendet werden, wenn notwendig, aber sie sollte verwendet werden, wenn die Daten Regeln zu folgen hat, lassen Sie sich nicht jemand, den Sie anders sagen).

Die allgemeine Regel lautet: Wenn die Einschränkung eine Eigenschaft Ihrer Daten vorhanden sind, es sollte durch das DBMS selbst durchgeführt werden (mit Einschränkungen oder Trigger oder was auch immer herstellerspezifische Dinge, die Sie zur Verfügung haben kann).

Wenn die Einschränkung jedoch eine Eigenschaft der -Anwendung ist, sollte von der Anwendung ohne jeden Aufwand vom DBMS behandelt werden.

In Wirklichkeit, ich glaube nicht, dass ich jemals gesehen, dass letztere Situation seit der Anwendung auftritt und Daten sind in der Regel ziemlich eng gebunden zu sein, aber ich habe nie kleine unerfahrene entweder, und sie können auch gesehen existieren :-)

+0

Ich sollte eine Enterprise Constraint hinzufügen. Für den Rest ist es wahr, was Sie sagen, ein RDBMS ist abstrakt von den Anwendungsprozessen nur auf dem Papier, in der Praxis sind sie eine verwobene Spule. – nottinhill

+0

Dann sollte es von der Datenbank mit einem Trigger durchgeführt werden. – paxdiablo

+0

Stimmen Sie zu, aber wie würden Sie - mit der obigen Syntax - definieren, dass ein Student nur bis zu 2 Mal im selben Kurs einschreiben darf? – nottinhill