Ciao ragazzi, sono alle prime armi con MySQL. Ho creato un database che simula il funzionamento di una blockchain, ecco lo schema logico:
- Blocco(CodBlocco, Timestamp, NumTransazioni, TotCommissioni, Hash, HashPrecedente, Dimensione, Nonce)
- Transazione(CodTransazione, Timestamp, Importo, Dimensione, Commissioni, Confermata, NumeroAttesa, Mittente)
- DatiUtente(Indirizzo, NumTransazioni, SaldoBitcoin, SaldoDollari, BitcoinRicevuti, BitcoinInviati)
- Composizione(Transazione, Blocco, NumeroTransazione).
C'è un vincolo di integrità referenziale fra l'attributo “Mittente” di Transazione e la chiave primaria di “Dati_Utente”. I vincoli di integrità referenziale sulla relazione composizione sono banali.
Ora, quando genero un blocco, dovrei fare una serie di controlli e azioni:
- L'attributo HashPrecedente deve essere effettivamente uguale all'attributo hash del blocco precedente (CodBlocco - 1).
- Prendo una serie di transazioni non ancora confermate (caratteristica dettata dall'attributo Confermata) e le inserisco nel blocco aggiornando la tabella Composizione.
- Calcolo gli attributi NumTransazioni, TotCOmmissioni, Dimensione di Blocco…
- etc…
Il mio dubbio è: come verifico tutte queste situazioni? con un trigger unico? con più trigger? Con una procedura e con dei trigger?
Io pensavo di fare una procedura che si chiama GeneraBlocco() che fa tutti questi controlli e aggiunge un blocco nella tabella Blocco. Dovrei accompagnarla da alcuni trigger? Qual è la soluzioni ottimale?
In più non ho ben chiara la differenza tra funzione e stored procedure, in questo caso dovrei usare una stored procedure immagino, in quanto non calcolo un valore di ritorno.