[genropy] Re: Chiavi primarie
- From: Giovanni Porcari <giovanni.porcari@xxxxxxxxx>
- To: genropy@xxxxxxxxxxxxx
- Date: Wed, 19 Oct 2016 19:38:25 +0200
Il giorno 19 ott 2016, alle ore 18:39, gianpiero.fontana@xxxxxxxx ha scritto:
Volevo sapere se è fattibile dai modelli genropy creare dei modelli
postgresql con chiave "multiple primary key"
Massimo mi dice che non è possibile e che bisogna passare sempre per una
chiave unica.
E' corretto?
Si è no.
Inizialmente era dato un supporto alle chiavi multiple ma lo svantaggio era una
maggior complessità
sintattica nei casi (99%) in usavamo chiavi primarie singole.
Abbiamo quindi preso la decisione di rimuovere il supporto completo alle chiavi
multiple
e ripiegare su un compromesso.
Di norma la chiave multipla viene usata per essere certi dell'unicità di un
record rispetto a più colonne.
La strada da percorrere in questo caso è quella di definire una colonna in più.
Ti riporto ad esempio la tabella 'counter' che nel package adm assicura la
gestione di tutti i contatori di Genropy:
def config_db(self, pkg):
tbl = pkg.table('counter',
pkey='codekey',pkey_columns='pkg,tbl,code,fld,period', name_long='!!Counter')
self.sysFields(tbl, id=False, ins=True, upd=True)
tbl.column('codekey', size=':80', readOnly='y', name_long='!!Codekey',
indexed='y')
tbl.column('code', size=':12', readOnly='y', name_long='!!Code')
tbl.column('pkg', size=':12', readOnly='y', name_long='!!Package')
tbl.column('tbl', size=':30', readOnly='y', name_long='!!Table')
tbl.column('fld', size=':30', readOnly='y', name_long='!!Counter Field')
tbl.column('period',size=':10',name_long='!!Period',indexed='y')
tbl.column('counter', 'L', name_long='!!Counter')
tbl.column('last_used', 'D', name_long='!!Last used')
tbl.column('holes', 'X', name_long='!!Holes')
tbl.column('errors','X', name_long='!!Errors')
Noterai l'attributo pkey_columns che definisce come viene generata la chiave
primaria.
Il limite è che le colonne che la compongono devono essere testo o char.
Non so se ti può servire ma in ogni caso fammi sapere se ci sono dubbi
Ciao
G
Other related posts: