Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Task B1 - Creazione in admin/units di un bottone per copiare le aree da un altra unità e per incollarle da un template. #10

Open
pierangelo opened this issue Mar 25, 2013 · 6 comments
Assignees
Labels

Comments

@pierangelo
Copy link
Contributor

https://github.com/Movimento5StelleLazio/ParlamentoElettronicoM5S/wiki/Design-2---UI

@ghost ghost assigned pierangelo Mar 25, 2013
@ralzakark
Copy link
Member

Io ed E. avevamo pensato di creare delle "skeleton area", cioè delle aree con solo alcuni campi. Queste aree verranno poi agganciate alla unit (nella quale il template si incolla) espandendo così i campi.
La restrizione, nell'usare le normali aree, è che queste ultime sono associate ad una unit. Se venissero usate in un template si rischia di vedersele cancellare quando elimini la unit. Inoltre dovresti avere sempre una unit di appoggio per agganciare le aree del template...

Qui trovi la struttura dati:

Il codice SQL per crearle sta nel mio branch "template" del Core:

Ho tentato anche di creare i modelli mondelefant...ma ancora non li ho provati, li trovi sotto il mio branch "template" del frontend:

Il primo passo è quello di creare un template di aree a partire da una unit esistente.
Per fare questo bisogna:

  1. Creare un record nella tabella "template"
  2. Copiare le aree (solo alcuni campi) della unit selezionata dentro la tabella template_area
  3. Copiare tutte le policy associate alle aree al punto 2 dentro l'apposita tabella template_area_allowed_policy

@pierangelo
Copy link
Contributor Author

bene bene

@pierangelo
Copy link
Contributor Author

alessandro ma ci sono motivi particolari per non aver reso gli id delle tabelle "template" e "template_area" non autoincrementali?

@ralzakark
Copy link
Member

Premesso che i data type sono da rivedere (non sono un esperto), non credo che in un determinato momento ci dovrebbero essere piú di 2 miliardi di aree tra tutti i template disponibili. Se la cosa avviene allora é meglio che il db dia errore piuttosto che continuare ad inserire (magari a causa di un bug). Inoltre penso che si potrebbero anche rivedere alcuni data type usati nelle tabelle base. Viene spesso usato ad es. il serial8 che ha come base il bigint che da documentazione é meno performante dell'integer.

@EmanueleSabetta
Copy link
Contributor

Alessandro ti spiego: in una tabella SQL ci deve essere sempre una colonna PRIMARY KEY, e questa e' costituita da un valore che identifica la riga. Nelle tabelle dove si vuole identificare le righe con una successione di numeri, invece di assegnare manualmente il valore, il database sql offre l'opportunita' di generare automaticamente un numero nuovo ogni volta che si aggiunge una riga, senza dover andare a vedere quale era l'ultimo della tabella. Per fare questo i vari db hanno vari metodi, e postgre usa i type serial4 o serial8, che dietro le quinte creano una sequence associata alla tabella, da cui prendono i numeri ogni volta che si aggiunge una riga nuova. Se si cancella una riga i campi della colonna non vengono tutti aggiornati ma rimangono con un buco, quindi l'unica cosa che ti assicura il type serial e' che la successione sia monotona crescente, ovvero che ogni nuova riga avra' un valore piu' grande di tutte le righe create (anche se poi cancellate) in passato. Quindi a meno che tu non voglia scrivere a mano il codice che crea l'id assicurandosi che sia il piu' grande ad ogni insert, ti conviene usare:

"id" SERIAL8 PRIMARY KEY

Fanno eccezione quelle tabelle dove la primary key e' gia' fornita insieme ai valori degli altri campi in quanto e' un identificativo ad esempio testuale.
Per il nostro caso io userei serial4. Dovrebbe bastare per i template, che non saranno mai miliardi come hai giustamente osservato. Serial8 lo userei per altro, essendo piu' lento da processare (64 bit invece che 32), su tabelle che crescono al crescere delle proposte o degli emendamenti, o delle operazioni online dell'utente.

@ralzakark
Copy link
Member

SERIAL4 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants