|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2002
Messaggi: 437
|
[MYSQL] Vincoli d'integrità
Non riesco a capire, guardando la documentazione di MySQL 5, se si possono e come definire dei vincoli d'integrità sugli attributi del tipo:
'voto_esame' decimal(2,0) unsigned NOT NULL in modo tale da esprimere: CHECK 'voto_esame' > 18, CHECK 'voto_esame' < 30 Mi sapete aiutare? Grazie. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2002
Messaggi: 437
|
spulciando la documentazione di mysql 5 ho scoperto che semplicemente non si può.
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Roma
Messaggi: 1360
|
Ciao, anche io ho lo stesso problema.
Mi servirebbe CHECK per creare dei vincoli ma ho visto che non è supportato da MySQL. C'è un modo alternativo per implementarlo? |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Passate a un engine SQL con tutti i crismi: http://www.firebirdsql.org/
MySQL i vincoli d'integrità non sa cosa siano. Esempio: provate a dichiarare un enum('pippo', 'pluto'): intanto se mettete NOT NULL e non il default, come default vi piazza il primo elemento della lista, e poi se inserite o effettuate un update con una stringa vuota, ve la memorizza. Lasciatelo perdere, che è meglio. Poi Firebird ha un linguaggio SQL per scrivere procedure e trigger molto potente e con una sintassi molto semplice e chiara.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Roma
Messaggi: 1360
|
Guarda puoi avere tutte le ragioni di questo mondo, ma c'è un piccolo problema...io devo fare il progetto con MySQL!
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Devi implementarlo a livello applicativo. D'altra parte http://dev.mysql.com/doc/refman/5.0/...ate-table.html
"The CHECK clause is parsed but ignored by all storage engines." Comunque se è un progetto per l'università potresti anche proporre Firebird come engine, evidenziando il fatto che MySQL non supporta funzionalità come questa, mentre FB lo fa perché si pone come obiettivo di essere MOLTO aderente allo standard SQL-2003. Tra l'altro è open source come MySQL, ma non ha una doppia licenza-capestro come MySQL, ma una tipo BSD che non alcun vincolo di tipo commerciale.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#7 |
|
Junior Member
Iscritto dal: Jul 2007
Messaggi: 3
|
Effettivamente con MySQL 5 non si possono esprimere i vincoli d'integrità con la clausola CHECK: anche io ho avuto lo stesso problema; se non si può e devi sviluppare il progetto per forza con MySQL devi aggirare il problema: immagino che sul database che stai costruendo in MySQL dovrai far girare un'applicazione, giusto? Beh, allora i controlli come
voto > 18 and voto <= 30 falli tramite l'applicazione in fase d'inserimento di una nuova tupla. Mi spiego: quando l'utente che usa l'applicazione vuole inserire dei nuovi dati nel db prima fai i controlli che il DBMS dovrebbe effettuare tramite CHECK. Se questi sono soddisfatti, allora consenti l'inserimento dei dati, altrimenti fai fallire l'operazione con un messaggio d'errore (ad esempio). Se non puoi fare così, devi dire al tuo prof che dovete usare un altro DBMS diverso da MySQL: ad esempio PostgreSQL credo che permetta di usare la clausola CHECK e permette di fare anche molte altre cose. Spero d'esserti stato d'aiuto. Ciao. |
|
|
|
|
|
#8 | |
|
Junior Member
Iscritto dal: Dec 2008
Messaggi: 2
|
Ciao cdimauro.
Ho installato FireBird. Il motivo è, appunto, perchè mysql non è in grado di far rispettare i vincoli CHECK. A questo punto, visto che ormai sono abitutato allo sviluppo in DBDesigner 4 per database mysql, vorrei che tu mi indicassi un IDE comodo comodo per sviluppare database per FireBird. Grazie. (Anche a chiunque voglia rispondermi..) A presto. Quote:
|
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Nov 2008
Messaggi: 411
|
Se MySQL non supporta il vincolo di integrità la cosa più ovvia mi parrebbe quella di delegare al software la gestione di tale vincolo.
Cosa che comunque io avrei fatto a prescindere in eventuale aggiunta al CHECK del DB. |
|
|
|
|
|
#10 | ||
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Quote:
Quindi colossi come IBM con DB2, Oracle, MS con SQL Server, ecc. ecc. nonché tantissimi ricercatori nel campo del database avrebbero perso il loro tempo dietro all'implementazione server-side dei contraint: si poteva benissimo realizzare il tuo client-side...
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Quote:
La gestione dell'integrità referenziale e delle varie constraint è il motivo principe per l'esistenza di un database relazionale. E' proprio quello che deve fare, non so se mi spiego. Altrimenti basta un file di testo. Il problema è che mysql è una schifezza immonda. Non so se avete letto il post sul blog del creatore di mysql riguardo l'uscita della nuova versione, la 5.1. Sostanzialmente dice che è stata rilasciata una versione affetta da bug critici e conosciuti, che possono compromettere la stabilità dei dati; ed è stata rilasciata solo per motivi di marketing, per avere qualcosa da vendere. E lo dice quello che l'ha creato, non uno che lo odia senza motivo. http://monty-says.blogspot.com/2008/...-released.html Leggete pure, c'è da rimanere a bocca aperta. Per l'amor di dio, abbandonate MySQL quanto prima!
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Apr 2006
Città: Bergamo
Messaggi: 440
|
scusate l'ignoranza ma non sarebbe possibile implementarlo con delle regole attive (trigger)?
__________________
Guitar Pub, il sito dedicato al mondo della chitarra e dei chitarristi... e il mio Spazio ------------------------------------ Ho trattato positivamente con: teosc |
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
*
Quote:
Ebbene sì: con la versione 5.0 hanno introdotto trigger e stored procedure, ma NON la possibilità di sollevare eccezioni. Cosa che non è stata introdotta neppure con la 5.1, nonostante da ben TRE ANNI sia stato aperto un ticket nel loro bug system e da un annetto circa sia disponibile una patch, ma... per la sola 6.0 alpha (di un backport per la 5.1 e/o la 5.0 non se ne parla proprio). Attualmente per aggirare il problema bisogna RICORRERE A UNA PEZZA, come ad esempio richiamare una stored procedure che non esiste, oppure inserire un record in una tabella con un valore inconsistente (es: inserire due volte lo stesso valore su un campo unique).
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:51.




















