Stò controllando le tue modifiche, però devo farti un appunto, non nel senso cattivo, ma solo per segnalarti alcune cose, visto che non ho fornito documentazione a riguardo:
1) le classi, oltre i driver e i pannelli specifici del singolo db, devono essere il più possibile slegati, nel senso che controlli puntuali a proprietà specifiche non devono essere presenti. Al più si crea un metodo specifico all'interno del driver stesso che, come forse avrai notato, contiene tutti i metodi presenti nelle altre classi analoghe, e solo il contenuto ovviamente cambia.
2) Il punto 1 è valido per tutte le proprietà, ad eccezione di alcune, in particolare quelle appunto legate agli oggetti relazione. Se dai un'occhiata ai metodi privati _createTable(), per esempio, ci sono alcuni elementi che sono comuni in tutti gli oggetti Table presenti nei driver.
A parte il codice che hai scritto, che formalmente è corretto, adesso il problema è capire dove inserire i controlli che hai indicato.
Le possibilità sono 2:
1) inserire la validazione all'interno del pannello di gestione dell'oggetto
2) creare un metodo all'interno dei driver per la validazione
In tutti e due i casi, è necessario prevedere che la validazione venga effettuata in tutti i casi:
a) creazione/modifica oggetto da pgDesigner,
b) import oggetto da fonti esterne (db, file sql, file progetto), onde evitare l'ingresso di valori non congrui.
In parole povere, questa verifica deve essere analizzata bene, onde evitare di commettere lo stesso errore che feci con la vecchia versione, ovvero includere codice di difficile controllo e manutenzione.
Ripeto, le tue modifiche sintatticamente sono ben integrate nel codice, solo che credo sia il punto meno indicato dove inserirle.
A questo punto farò un'analisi direttamente sul codice, per capire come e dove meglio inserire queste validazioni ma, ovviamente se hai qualche proposta tu, la analizziamo insieme....