Da rächt sich die Ansicht, dass man man aus Zeit-/Kostengründen beim Datenbankdesign auf die Deklaration der Constraints VWzüchten kann, da man diese ja im Programm berücksichtigt.
Oh, da bist du aber leicht im Irrtum: Selbstverständlich existiert ein eindeutiger Index Ortname-PLZ, so daß dieselbe Variante nicht doppelt vorkommen kann.
Da war wohl was anderes gemeint: Du kannst in der Datenbank den Foreign Key / Constraint so hinterlegen, dass die
DB es nicht zugelassen hätte, einen Ort zu Löschen, solange dieser noch in einem Adress-Datensatz verwendet wird. Der "fehlerhafte Datensatz" wäre dir also schon beim Lösch-Versuch der "überflüssigen" Orte aufgefallen und nicht erst später. Es wäre also nie zu einer Inkonsistenz gekommen.
Als weiterer Hinweis: Ist die ORT_ID in der Tabelle Adressen als "NOT NULL" (also als Pflichtfeld) deklariert? Falls nicht, solltest du einen "left outer join" (ähnlich wie in #3) in deine View einbauen, damit dort auch Adressen auftauchen, für die kein Ort angegeben wurde.