[Db] [mySQL] se non c'è crealo!
Tassoman (mailing)
ml a tassoman.com
Mer 15 Nov 2006 14:12:39 CET
Il giorno mer, 15/11/2006 alle 08.34 +0100, Domenico L. ha scritto:
> in mysql ci sono 2 sintassi per fare insert o update in unica istruzione
> dipende dalla versione, cmq è sempre meglio usare un'unica istruzione
> piuttosto che 2 per vari motivi:
> - la replace è atomica
> - non devi scrivere codice php
> - è più pulito
> Problema:
> - non è portabile, ma tanto neppure gli autoincrement lo sono quindi una
> rimessa a posto la devi sempre fare e, per esempio, anche in oracle
> esiste una funzione simile alla replace che si chiama merge, questo vuol
> dire che in caso di migrazione devi cambiare un'isturzione sql e non il
> codice.
>
>
> L'utilizzo dei campi numerici autoincrement come chiavi primarie è un
> approccio ampiamente superato e che spesso da più problemi che vantaggi.
>
> Se il campo nome è unique (e magari not null) perché non fai diventare
> questo chiave primaria e butti via il campo id?
>
> Però bisogna fare attenzione ad essere certi che il campo nome sia
> sempre unique e capire se deve esserlo case sensitive o meno (mario e
> Mario sono la stessa chiave o no?)
Fortunatamente la portabilità non è un problema, per ora. Trattandosi di
un progetto personale, penso di affidarmi esclusivamente a mysql. Quindi
credo che la REPLACE in questo caso possa essere cosa buona.
I dati che vado a raccogliere, i nomi sono tutti maiuscoli. Al limite
contengono spazi e ' che starebbero per accenti. Che siano unique devo
ancora scoprirlo. Ma credo che per come sia strutturata la cosa debbano
esserlo con ampia probabilità.
La int auto increment pensavo di metterla come riferimento per le USING
durante le query di JOIN, però effettivamente se solo il nome fa da
chiave è già sufficiente, a patto di inserire lo stesso nome anche nelle
altre tabelle.
Alla fine però inserisco sto nome 2 volte e mi vien da pensare che di
nuovo potrei avere problemi di lievitazione ?
--
Blogging humanum est, Tassoman ovest.
http://blog.tassoman.com
Maggiori informazioni sulla lista
Db