Originariamente inviato da Valeria75_bis
Ciao a tutti, vorrei avere qualche chiarimento in merito al formato di campi utilizzato

(1)
quando come chiave primaria di una tabella è meglio usare un GUID e quando un ID incrementale??
La differenza principale e' un id_incrementale puo' essere ordinato asc/desc, raggruppato MAX() min(), con un GUID non avrebbe senso fare cio'. Il pericolo di collisioni e' pressoche' inesistente in entrambi i casi. Un id autoincrement deve avere una dimensione del campo numerico sufficiente a contenere questo avanzamento di occupazione per impedire che arrivi a "riavvolgersi" cioe' che il bit piu' significativo vada in overflow ed il contatore ricominci da 0. Il GUID e' un campo char/varchar . I campi numerici sono piu' performanti ed occupano meno spazio.

(2)
per un campo di "annotazioni" va bene il formato TEXT?? (in SQL Server userei varchar(MAX)
Dipende dalla consistenza dell'annotazione. TEXT e' dinamico con dimensione prefissata max 64K, varchar ha a disposizione anche lui 65535 Byte ma condivisi tra tutte le colonne varchar, cioe' in una tabella la somma delle occupazioni in byte dei campi varchar e' 65535 byte. Occhio poi al character set. Se e' multibyte 255 caratteri NON sono 255 byte ma molti di piu'. cambia qualcosa anche a seconda dell'engine.

(3)
per un campo boolean è corretto usare il TINYINT(1)
Si.

(4)
per i campi di testo in generale è corretto usare VARCHAR(DIM)
Si

(5)
vorrei tenere traccia, per ogni record, della data di aggiornamento di ogni campo .... io ho sempre usato il timestamp (impostato col CURRENT_TIMESTAMP) ma ho visto che qualcuno usa un campo datetime (impostao a NOW) .... è sbagliata la mia soluzione?
Se utilizzi il CURRENT TIMESTAMP il campo verra' aggiornato in modo automatico, cioe' puoi ometterlo nella query update, ma aggiornera' SOLO se viene effettuata una modifica ad almeno un campo. Se i valori dell'update sono identici all'esistente non aggiorna (giustamente) il timestamp, ed anche l'update rendera' 0 record aggiornati.
Se aggiorni manualmente con NOW() intanto lo devi dichiarare mentre il primo puo' essere omesso e poi l'aggiornamento della data significhera' anche la modifica di fatto del record e quindi la data verra' aggiornata anche se nessuna altra variazione e' stata fatta al record e l'update rendera' 1 riga modificata anche se questo per la consistenza del record non e' vero.