Documentation non mise à jour
Le MCD de Médiacad est disponible aux formats pdf (source:trunk/docs/developpers/database/MCD_mediacad.pdf) et mwb (source:trunk/docs/developpers/database/MCD_mediacad.mwb) (MySQL Workbench 5.2 CE) dans la partie docs/developpers/database/ des sources (source:trunk/docs/developpers/database).
Les scripts SQL de la base de données de départ (tables (source:trunk/application/configs/install/tables.install.sql) et triggers (source:trunk/application/configs/install/triggers.install.sql)) sont disponibles dans la partie application/configs/install/ des sources (source:trunk/application/configs/install).
Encodage et formats de tables
La base de données et les tables sont encodées en utf8_unicode_ci.
Toutes les tables sont au format InnoDB.
Tous les noms sont en anglais (tables, champs, enum...) pour éviter le franglais (getEleveById... par exemple).
Noms de tables
Les noms de tables sont en minuscules.
Seules les tables de jointure comportent des underscores (_) de la forme table1_table2 (dans l'ordre 1 -> n).
Nom des champs
Tous les champs sont en notation camelCase (sauf les clefs primaires des tables de jointure : voir ci-dessous).
La clef primaire (quand elle existe) est de la forme nomDeLaTableId (en camelCase). Par exemple, la clef primaire de la table moderatorviewlog est moderatorViewLogId.
Par exception, la clef primaire d'une table de jointure est de la forme nomDeLaTable1_nomDeLaTable2_id. Par exemple, la clef primaire de la table school_user est school_user_id.
Les champs suffixés par Id sont des clefs étrangères avec des contraintes associées (ON UPDATE CASCADE, ON DELETE CASCADE ou SET NULL selon les cas). Par exemple, media.ownerUserId est une clef étrangère pointant vers user.userId.
Les champs suffixés par Code sont des identifiants externes à la base, gérés par des fichiers de configuration de l'application. Par exemple, media_language.languageCode fait référence au code que l'on trouve dans /application/config/language.cfg.array.php.
Les champs préfixés par is, has ou must sont des champs "booleens" (ENUM ('0','1')), et inversement.
Nom de la table Description
academicsubscription Abonnements académiques (y compris publics)
connectionlog Logs des connexions au module pr (private)
encodingtask Tâches d'encodage (médias et fiches pédagogiques) en attente et en cours (tâche de fond)
group Groupes (divisions)
group_school_user Table de jointure groupes / utilisateurs en établissements
maintenancetask Dates des maintenances automatiques de l'application
media Médias
mediaauthor Auteurs (indexation)
mediacollection Collections (indexation)
mediapublisher Editeurs (indexation)
media_audience Table de jointure média / public (clefs externes à la base /application/config/audience.cfg.array.php)
media_discipline Table de jointure média / matières enseignées (clefs externes à la base /application/config/discipline.cfg.array.php)
media_keyword Table de jointure média / mots clefs du thesaurus UNESCO (clefs externes à la base /application/config/keyword.cfg.array.php)
media_language Table de jointure média / langues (clefs externes à la base /application/config/language.cfg.array.php)
media_mediaauthor Table de jointure média / auteurs
media_mediacollection Table de jointure média / collections
media_mediapublisher Table de jointure média / éditeurs
media_type Table de jointure média / genres (clefs externes à la base /application/config/type.cfg.array.php)
moderatorviewlog Logs des affichages de médias par le superMod quand il n'y a normalement pas accès
personalsubscription Abonnements personnels (favoris)
publicschoolsubscription Abonnements établissements publics
request Demandes d'abonnements établissements publics, académiques et académiques publics, de suppression définitive et de signalements
school Etablissements
schoolsubscription Abonnements établissements
schoolsubscription_audience Table de jointure abonnement établissement / public (clefs externes à la base /application/config/audience.cfg.array.php)
schoolsubscription_group Table de jointure abonnement établissement / groupes (divisions)
school_user Table de jointure établissement / utilisateur (+ rôles établissement)
statisticvisit Statitiques de visites (connexions + anonymes)
user Utilisateur (+ rôles généraux)
userconfig Configuration utilisateur (signature charte...)
version Version de la structure de la base de données (numéro de révision) pour l'update de l'application
La table user regroupe les fiches uniques de tous les users de l'application. La jointure avec l'annuaire académique se fait via user.uid, surdimensionné (VARCHAR(15)) pour s'adapter à d'autres UID que l'académie de Bordeaux. La jointure avec les autres tables de l'application se fait via user.userId. La table contient aussi les rôles au niveau de l'application (acadMod, superMod, sAdmin). Le champs user.schoolRegisteredCount indique le nombre d'établissements dans lequel l'user est inscrit (table school_user) pour faciliter la maintenance de la base (par exemple, supprimer les users inscrits dans aucun établissement depuis plus de 6 mois (champs user.lastUpdateDate)). La cohérence des données entre user et school_user est assurée par les deux triggers after_insert_school_user et after_delete_school_user.
La table userconfig contient les configurations personnelles de chaque user, userconfig.label étant le nom de la config et userconfig.value sa valeur. Par exemple : userconfig.label == "hasValidatedCharter" indique si l'user a validé ou non la charte d'utilisation (userconfig.value == '1' ou '0').
La table connexionlog contient les logs de connections ;o).
La table school regroupe tous les établissements de l'application. La jointure avec l'annuaire académique se fait via school.uai (ex RNE). La jointure avec les autres tables de l'application se fait via school.schoolId.
La table school_user fait la jointure entre school et user dans une relation n:m. La table contient aussi les rôles au niveau de l'établissement (student, teacher, schoolMod).
La table group contient tous les groupes de l'application (en fait, les divisions uniquement). La jointure avec l'annuaire académique se fait via group.label. Le code MefStat5, conservé pour mémoire dans group.mefStatCode, permet d'affecter le groupe aux niveaux de l'application (group.groupLevelCode) via une table de concordance.
La table group_school_user fait la jointure entre group et school_user dans une relation n:m. Avec les contraintes de foreign key (ON DELETE CASCADE), tout user désinscrit d'un établissement (school_user) sera automatiquement supprimé des groupes de l'établissement (group_school_user). Le champ group_school_user.userType permet d'indiquer si l'user est un student ou un teacher dans le groupe.
La table media est la table centrale de l'application, sa clef primaire (media.mediaId) étant référencée dans 15 autres tables de l'application. Chaque média dispose d'une entrée dans cette table, qui contient aussi des caractéristiques techniques, les conditions de suppression, une partie de l'indexation (celles de relation 1:0,1), les statistiques de consultation et de téléchargement entre autres.
La table encodingtask contient les tâches d'encodage en attente et en cours, effectuées en tâches de fond.
Les tables mediaauthor, mediapublisher et mediacollection regroupent respectivement les listes d'auteurs, d'éditeurs et de collections. Ces listes sont saisies par les users (si l'item n'est pas déjà disponible), et modérées par le superMod (correction ou fusion d'items).
Les tables media_mediaauthor, media_mediapublisher et media_mediacollection sont les tables de jointure entre les tables ci-dessus et la table media, dans une relation n:m.
Les tables media_type (genres), media_language (langues), media_keyword (mots clefs du thesaurus UNESCO), media_discipline (matières enseignées) et media_audience (public) sont les tables de jointure entre des clefs externes à la base (que l'on peut trouver dans application/config/[key].cfg.array.php) et la table media dans une relation n:m.
La table moderatorviewlog contient les logs des consultations de médias auxquels normalement le superMod n'a pas accès.
Les tables []subscription concernent les abonnements aux médias.
La table personnalsubscription contient les abonnements personnels (favoris), liés à la foreign key user.userId. Les abonnements personnels ne sont donc pas supprimés au départ d'un user d'un établissement (suppression de school_user.school_user_id).
La table schoolsubscription contient les abonnements établissements. Elle est liée à la table media par une relation n:m. La foreign key schoolsubscription.school_user_id avec la contrainte ON DELETE CASCADE entraine la suppression des abonnements établissement quand l'user quitte l'établissement.
La table schoolsubscription_audience est la table de jointure entre les abonnements établissement et le public (clefs externes à la base que l'on peut trouver dans application/config/audience.cfg.array.php) dans une relation n:m.
La table schoolsubscription_group est la table de jointure entre les abonnements établissement et les groupes dans une relation n:m.
La table publicschoolsubscription contient les abonnements établissements publics. La foreign key publicschoolsubscription.school_user_id a pour contrainte ON DELETE SET NULL : quand le schoolMod quitte l'établissement, l'abonnement n'est pas supprimé.
La table academicsubscription contient les abonnements académiques et académiques publics (même ligne). Les foreign keys academicsubscription.userId et academicsubscription.publicUserId ont pour contrainte ON DELETE SET NULL : quand l'acadMod ou le superMod est supprimé de l'application, les abonnements ne sont pas supprimés.
La table request contient toutes les demandes possibles dans l'application (demande d'abonnement établissement public, académique, académique public, de suppression, de signalement). Le champ request.mediaId peut être NULL en cas de signalement d'un média par un user n'y ayant pas accès (il devra dans request.requestMessage indiquer suffisamment de détails pour que le destinataire trouve le média). Les destinataires sont indiqués dans request.requestRecipient.
La table statisticvisit contient les statistiques journalières de connections (student et teacher) et de consultation (anonym).
La table maintenancetask contient les dates des maintenances automatiques de l'application (réalisées à la première connection d'un user de la journée).
La table version contient la version de la base de données (numéro de commit du SVN), à comparer avec application/library/Version.php pour s'assurer de la concordance version de la base de données <-> version des scripts. En cas de différence, une mise à jour automatique des tables est effectuée via pr::sadmin::update.
Les triggers (source:trunk/application/configs/install/triggers.install.sql) sont les suivants :
Table school_user :
after_insert_school_user : incrémente user.schoolRegisteredCount et modifie user.lastUpdateDate à NOW() pour l'user correspondant.
after_delete_school_user : décrémente user.schoolRegisteredCount et modifie user.lastUpdateDate à NOW() pour l'user correspondant.
Créé avec HelpNDoc Personal Edition: Environnement de création d'aide complet