Rolf B: Datenbank Anfängerfrage

Beitrag lesen

Hallo Pauli,

(1) entweder (...) (2) oder

Ja.

Zu Variante (2) muss man folgendes sagen: Das einzige, was bei meinem Arbeitgeber heiliger ist als die Mittagspause, ist die Performance des Großrechners. MIPS kann man zwar kaufen, aber IBM hält dafür nicht nur die Hand auf, sondern stellt gleich einen ganzen Lastwagen zum Abtransport der dafür einzuwerfenden Münzen hin. Man bezahlt Host-Leistung monatlich entsprechend MIPS-Maximums, das man während dieses Monats hatte, und sei es auch nur für ein paar Sekunden. Es gibt Monitorprogramme, die gezielt das System drosseln, wenn die Last zu hoch geht. Deswegen war es uns immer verboten, in DB2 (der SQL-DB des Großrechners) Dinge zu nutzen die mehr taten als unbedingt nötig. Keine Trigger, keine Foreign Keys, ständiges Optimieren der Queries und des technischen Modells. Alle DB-Zusammenhänge hatten sich in Programmlogik wiederzufinden. Das führt dann zwar beim Test gelegentlich zu Inkon(tin|sist)enzen in der DB, aber dafür ist der Test ja da :)

Ein SQL Server dürfte nicht so hart an der Leistungsgrenze laufen, dass solche Maßnahmen nötig sind. Und wenn doch, kann man ihn clustern und die Leistungsgrenze hinausschieben. Auf dem Großrechner kann man das zwar auch (wir fahren bei uns einen Sysplex aus 6 fetten Z/OS Maschinen), aber es ist immens teuer. Es ist allerdings noch teurer, die Großrechnerwelt komplett in eine C/S Welt umzubauen, darum haben wir das Ding noch.

Deswegen: Nutze FKs und Kaskadierung. Das macht das Leben durchaus einfacher. Wenn Du dann allerdings bei DB-Operationen „rumfummeln“ musst, dann müsste die erste Aktion sein, das eigenen DB-Modell und die Funktionsweise der diversen Contraints besser zu verstehen. Wenn Du allerdings auf Situationen stößt, wo Du nicht mehr weißt wie Du mit deinen DB-Operationen um die Constraints herumkommst, musst Du den Sinn der Constraints in Frage stellen.

Manchmal gibt es auch einfach Fälle, wo MYSQL zu dumm ist. Z.B. steht im MYSQL Handbuch unter InnoDB, dass sich diese DB-Engine bei Massenänderungen nicht standardkonform verhält, sie prüft die Contraints zu früh. Dafür gibt's dann zur NOT noch die Option, die Checks abzuschalten, mit SET FOREIGN_KEY_CHECKS=X, mit 0 oder 1 für X. In dem Moment hast Du die Verantwortung für die referenzielle Integrität selbst an der Backe.

Rolf

--
sumpsi - posui - clusi