Specifications
Marc SCHAEFER
schaefer at alphanet.ch
Wed Oct 10 12:33:43 CEST 2001
On Wed, 3 Oct 2001, Frederic Schutz wrote:
> Ce serait bien si on pouvait faire quelque chose à partir de ça, en
> particulier définir quelques tables en SQL. Personnellement, je n'ai pas
> peur de partir sur une mauvaise voie et de tout jeter après quelques
> essais, tant que ça avance.
Ben alors voilà:
-- Projet GULL Compta
-- initial.sql -- Définitions des structures de données de la BD
-- AUTHOR
-- Marc SCHAEFER <schaefer at alphanet.ch>
-- LICENSE
-- (C) 2001 by Marc SCHAEFER, licensed under the terms of the
-- GNU General Public License as published by the Free Software
-- Foundation; either version 2 or later (at your option).
-- DESCRIPTION
-- Ceci définit les structures de données, en fonction des contraintes
-- décrites sur: http://www.linux-gull.ch/projets/compta/.
-- NOTES
-- - Cette première version suppose:
-- - une base de données PostgreSQL 7.x
-- - une allocation assez large des données (utilisation de TEXT
-- plutôt que VARCHAR p.ex.)
-- - une insistance sur l'adéquation à la spécification.
-- - pour l'instant une simplification: on évite la prolifération
-- de tables adresse, code_pays, localité, etc. Ce qui pourra être
-- fait dans une deuxième étape.
-- - il manque des contraintes/triggers pour empêcher la modification
-- de données sensibles.
-- - il faut décider si l'on autorise des valeurs par défaut.
-- BUGS
-- - Mix of French and English
-- - INT4 in REFERENCES to SERIAL must be specified.
-- TODO
-- - Check with PG7 if ok.
-- BASED-ON
-- Original work
-- $Id$
--
-- BUGS
-- - This shouldn't be an active table, it's just inherited. Alternatively
-- this could be REFERRED to.
CREATE TABLE adresse (adresse_1 TEXT NOT NULL,
adresse_2 TEXT,
adresse_3 TEXT,
localite TEXT NOT NULL,
code_ville TEXT NOT NULL,
code_pays TEXT DEFAULT 'CH' NOT NULL);
CREATE TABLE societe (id SERIAL NOT NULL, -- interne à la base de données
libelle TEXT NOT NULL, -- libellé
UNIQUE(id), PRIMARY KEY(id))
INHERITS (adresse);
-- NOTES
-- - REFERENCES ensures societe exists.
-- TODO
-- - Add trigger to disable add/modify once clotured, probably
-- on another table.
-- - Add trigger so that the devise cannot be changed once set.
-- - Add trigger to check that (societe, [intervalle]) is not
-- within any other intervalle (debut, fin).
CREATE TABLE exercice (id SERIAL NOT NULL, -- interne à la base de données
societe INT4 REFERENCES societe NOT NULL,
debut DATE DEFAULT CURRENT_DATE NOT NULL,
fin DATE NOT NULL,
cloture BOOLEAN DEFAULT 'f' NOT NULL,
devise VARCHAR(3) DEFAULT 'CHF' NOT NULL,
UNIQUE(id), PRIMARY KEY(id));
-- BUGS
-- - libellé non unique dans la spécification.
CREATE TABLE provenance (id SERIAL NOT NULL, -- interne à la base de données
libelle TEXT NOT NULL, -- libellé
UNIQUE(libelle),
UNIQUE(id), PRIMARY KEY(id));
CREATE TABLE lot (id SERIAL NOT NULL, -- interne à la base de données
libelle TEXT NOT NULL, -- libellé
UNIQUE(id), PRIMARY KEY(id));
-- BUGS
-- - This shouldn't be an active table
-- - Should that reference exercice, or not ?
-- - Missing tables: compte,
-- TODO
-- - Complete, inclusive comments for triggers. See specification.
-- This is the most complicated table.
CREATE TABLE ecriture (id SERIAL NOT NULL, -- interne à la base de données
libelle TEXT NOT NULL,
societe INT4 REFERENCES societe NOT NULL,
provenance INT4 REFERENCES provenance NOT NULL,
numero INT4 NOT NULL,
lot INT4 REFERENCES lot NOT NULL,
date_valeur DATE NOT NULL,
date_saisie DATE DEFAULT CURRENT_DATE NOT NULL,
date_modification DATE DEFAULT CURRENT_DATE NOT NULL,
compte INT4 REFERENCES compte NOT NULL,
montant_signe MONEY NOT NULL,
montant_devise VARCHAR(3) DEFAULT 'CHF' NOT NULL,
taux_change MONEY, -- BUGS: type
montant_devise_signe MONEY NOT NULL,
createur INT4 REFERENCES utilisateur NOT NULL, -- ??
modificateur INT4 REFERENCES utilisateur NOT NULL,
comptabilise BOOLEAN NOT NULL,
UNIQUE(id), PRIMARY KEY(id));
CREATE TABLE groupe(id SERIAL NOT NULL, -- interne à la base de données
nom TEXT NOT NULL,
UNIQUE(nom),
UNIQUE(id), PRIMARY KEY(id));
CREATE TABLE utilisateur(id SERIAL NOT NULL,
nom TEXT NOT NULL,
pw_hash CHAR(32), -- md5sum en texte par exemple.
UNIQUE(nom),
UNIQUE(id), PRIMARY KEY(id));
CREATE TABLE membre_de(utilisateur INT4 REFERENCES utilisateur NOT NULL,
groupe INT4 REFERENCES groupe NOT NULL,
UNIQUE(utilisateur, groupe));
CREATE TABLE autorisation(groupe INT4 REFERENCES groupe NOT NULL,
societe INT4 REFERENCES societe NOT NULL,
exercice INT4 REFERENCES exercice NOT NULL,
lecture BOOLEAN NOT NULL,
ecriture BOOLEAN NOT NULL,
modification BOOLEAN NOT NULL,
cloture BOOLEAN NOT NULL,
comptabilisation BOOLEAN NOT NULL,
UNIQUE(groupe, societe, exercice));
-- BUGS
-- - Not clear to me. Is that a session ?
CREATE TABLE parametre (id SERIAL NOT NULL, -- interne à la base de données
societe INT4 REFERENCES societe NOT NULL,
utilisateur INT4 REFERENCES utilisateur NOT NULL,
parametre TEXT, -- peut être NULL
UNIQUE(id), PRIMARY KEY(id));
More information about the compta
mailing list