Progetto

Generale

Profilo

Actions

Sorgenti SQL

I sorgenti della piattaforma lato DB si trovano nel progetto, nella directory db/
Si compongono di 4 differenti files:
  • struct.sql
  • function.add.sql
  • function.edit.sql
  • view.sql

struct.sql

All'interno sono presenti tutte le definizioni delle tabelle e lo schema delle relazioni, in formato (testo) SQL.
Un esempio di struttura di tabella:

CREATE TABLE province(
        id              SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
        id_region       SMALLINT UNSIGNED NOT NULL REFERENCES region(id),
        code            CHAR(2) UNIQUE NOT NULL,
        name            CHAR(50) UNIQUE NOT NULL,
        PRIMARY KEY(id)
);

function.add.sql e function.edit.sql

Definizione di tutte le STORED FUNCTIONS e STORED PROCEDURES utilizzate per manipolare i dati.
Sono state utilizzate le STORED FUNCTIONS e STORED PROCEDURES per fornire un'interfaccia comune al sistema e aumentare il livello di sicurezza.
Le funzioni DOVREBBERO avere un prefisso comune per l'inserimento e modifica dei dati: save_<entità> ma, a causa di continue interruzioni durante l'evoluzione del software, molte funzioni ancora sono distinte in new_<entità> e edit_<entità>
Un esempio di struttura di una STORED FUNCTIONS:

delimiter //
DROP FUNCTION IF EXISTS save_communication//
CREATE FUNCTION save_communication(_id INTEGER UNSIGNED, _subject TEXT, _body TEXT, _to_id_event INTEGER UNSIGNED, _to_all_subscribers BOOLEAN, _send_after TINYINT)  RETURNS INT
BEGIN
        IF (_id IS NULL) THEN
                INSERT INTO communication (subject, body, to_id_event, to_all_subscribers, send_after)
                        VALUES (_subject, _body, _to_id_event, _to_all_subscribers, _send_after);
        ELSE
                UPDATE communication SET 
                        added = NOW(), subject = _subject, body = _body,
                        send_after = _send_after
                        WHERE id = _id;
        END IF;

        RETURN 0;
END //
delimiter ;

view.sql

Definizione di tutte le VISTE utilizzate nel sistema.
Sono state utilizzate le VISTE per fornire un'interfaccia comune al sistema e aumentare il livello di sicurezza.
La viste sono, solitamente, identificate con il prefisso list_<entità> o list_<entità_entità>.
Un esempio di struttura di una VISTA:

CREATE OR REPLACE VIEW list_communication AS
        SELECT c.*,
                e.id_loc, e.ads_id_event, e.mag_pref_value, CAST(e.depth AS DECIMAL(5,1)) AS depth, e.zone_name, e.n_quests AS counter,
                lat_degree, lat_first, ROUND(lat_second) AS lat_second,
                lon_degree, lon_first, ROUND(lon_second) AS lon_second,
                e.event_date
                FROM communication AS c
                LEFT JOIN event AS e ON (c.to_id_event = e.id);

Aggiornato da Diego Sorrentino circa 6 anni fa · 2 revisions