Sorgenti SQL¶
I sorgenti della piattaforma lato DB si trovano nel progetto, nella directorydb/
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