Frage

Ich habe eine Tabelle, die Abteilung, mit mehreren Bitfeldern Abteilung Arten, um anzuzeigen, Eine davon ist Warehouse (wenn es wahr ist, zeigt die Abteilung Lager)

Und ich habe eine andere Tabelle, ManagersForWarehouses mit folgenden Struktur:

ID autoinc
WarehouseID int (foreign key reference DepartmentID from departments)
ManagerID int (foreign key reference EmployeeID from employees)
StartDate
EndDate

neue Manager für Lager zu setzen, die ich in dieser Tabelle einfügen mit EndDate null, und ich habe einen Trigger, EndDate für das Lager für die bisherigen Rekord setzt = Startdatum für neue Manager, so dass ein Single-Manager erscheint für ein Lager in einem bestimmten Zeit.

Ich möchte zwei Check-Einschränkungen wie folgt hinzufügen, aber nicht sicher, wie dies zu tun

  1. erlauben nicht in ManagersForWarehouses einfügen, wenn WarehouseID nicht als Lager markiert
  2. darf nicht Warehouse deaktivieren, wenn es gibt Aufzeichnungen in ManagersForWarehouses

Danke

War es hilfreich?

Lösung

  1. In Tabelle Departments, fügen Sie eine eindeutige Einschränkung (DepartmentID, IsWarehouse)
  2. In ManagersForWarehouses Tabelle, Spalte IsWarehouse hinzufügen und haben eine Bedingungsprüfung erzwingen, dass IsWarehouse = 'Y'
  3. In ManagersForWarehouses Tabelle, fügen Sie ein FK auf (WarehouseID, IsWarehouse) referrring zu Departments (DepartmentID, IsWarehouse) und mit UPDATE CASCADE-Klausel ON.

Und Sie sind alle mit 100% Rock solider Integrität, ohne Lücken gesetzt. Nur größte Einschränkungen haben keine Lücken. Auslöser sind weniger zuverlässig.

Andere Tipps

Sie sollten einen Trigger verwenden, um dies zu tun. Eine auf jedem Tisch. Achten Sie darauf, für mehrere Datensatz Einfügungen, Aktualisierungen oder Löschungen zu berücksichtigen. Um irgendetwas anderes tun Sie Ihre Daten in Gefahr wäre setzen. Daten werden nicht in Datenbanken nur aus Anwendungen. Sie können sich nicht leisten, diese Art der Sache aus der Anwendung zu erzwingen, wenn Sie möchten, dass Daten falsch und nutzlos ist.

Sie setzen diese Art von Einschränkungen für die DB-Tabelle nicht.
Es ist besser, so etwas mit dem Code (Business-Logik).

erzwingen

EDIT: Nicht zu Ihrer Frage, aber Sie sollten den Auslöser als auch nicht verwenden, um Updates zu anderen Zeilen auszuführen. Ich habe keine festen Verbindungen, um es wieder mit.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top