IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Schéma Discussion :

Appel à suggestion pour une bd perso


Sujet :

Schéma

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 99
    Points : 62
    Points
    62
    Par défaut Appel à suggestion pour une bd perso
    Bonjour,

    le but est de faire une appli permettant de gérer des cours ou les cours peuvent être modifié par différentes personne, une sorte de mediawiki en fait ( je refais un peu la roue ici , c'est à but didactique , sinon je prendrai mediawiki...).

    je sais pas trop comment articuler les différentes parties soit, les cours qui ont seulement un titre et une description, les leçons qui ont un titre une description mais également un texte, et les archive de ces 2 parties , pour pouvoir récupérer le cas échéant la description du cours/leçons ou le contenu de la leçon.

    Je suis arrivé a 2 idées, la première :

    En substance ça donne :
    -une table cours avec un id, un titre, une description, l'id du créateur, l'id de l'éditeur et la date de la dernière modif
    - une table de leçon similaire à celle des cours avec en plus le texte de la leçon et l'id du cours (pour la relier au cours père)
    - une table d'archive pour le cours, avec un id, la description du cours, l'id de l'éditeur, la date de l'édition et l'id du cours (cours.id , qui correspond a l'actuel et donc dernière version du cours)
    - une table archive des leçons presque identique a celle pour les cours (encore une fois) a ceci pres qu'elle contiennent bien évidement le texte de la leçon et l'id non pas du cours mais de la dernière leçon -lesson.id)
    - une table utilisateur, avec l'id de chaque utilisateur

    la seconde idée vient du fait qu'il y'a autant de similitude entre les tables cours et leçons cependant du point de vue de l'utilisation et des perf je ne sais pas ce que ca donne...
    - une table meta_cours_leçons contenant un id, un titre, une description, le nom du créateur (du cours ou de la leçon), la date de création, le nom de l'éditeur et la date de l'édition , un type de document (cours ou leçon), l'id du cours (que ce soit pour le cours ou les leçons), l'id_text dans le cas ou c'est une leçon ( vide si c'est un cour)
    - une table pour les textes des leçons avec un id et le texte.
    - une table archive_meta contenant la description, l'editeur, la date d'édition, et l'id du meta_cours_leçon correspondant, l'id_text de la leçon archivée (table archive_text_lesson)
    -une table d'archive pour le texte de leçon, champs id et texte

    Je ne suis pas sur de la nécessité d'avoir 2 tables pour les contenus des leçons pour ce qui est des perfs ? :/

    je pars du principe que si l'on fait un cours cela crée une entrée avec par exemple id = 1 , course_id =1 , et la premiere lecon aura id=2, course_id =1. ( probleme => Ca implique que les lecons seront ressortie dans l'ordre chronologique de creation par le fetch , il faudrait peut etre assigner un id_ordre pour pouvoir les reclasser )

    Ce serait pour un but pouvant avoir beaucoup d'utilisateur et donc beaucoup de cours .

    dernière edition de la Base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    -- phpMyAdmin SQL Dump
    -- version 3.1.1
    -- http://www.phpmyadmin.net
    --
    -- Serveur: localhost
    -- Généré le : Sam 21 Février 2009 à 19:04
    -- Version du serveur: 5.1.30
    -- Version de PHP: 5.2.8
    
    SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
    
    --
    -- Base de données: `courses_platform`
    --
    
    -- --------------------------------------------------------
    
    --
    -- Structure de la table `archives_courses`
    --
    
    CREATE TABLE IF NOT EXISTS `archives_courses` (
      `ac_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `ac_title` varchar(80) NOT NULL,
      `ac_description` varchar(255) NOT NULL,
      `ac_editor_id` int(10) unsigned NOT NULL,
      `ac_edit_date` datetime NOT NULL,
      `ac_edit_comment` varchar(255) NOT NULL,
      `ac_small_edit` tinyint(1) DEFAULT NULL,
      `ac_course_id` int(10) unsigned NOT NULL,
      PRIMARY KEY (`ac_id`),
      KEY `ac_editor_id` (`ac_editor_id`,`ac_course_id`),
      KEY `ac_course_id` (`ac_course_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
    
    -- --------------------------------------------------------
    
    --
    -- Structure de la table `archives_lessons`
    --
    
    CREATE TABLE IF NOT EXISTS `archives_lessons` (
      `al_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `al_title` varchar(80) NOT NULL,
      `al_description` varchar(255) NOT NULL,
      `al_content` text NOT NULL,
      `al_editor_id` int(10) unsigned NOT NULL,
      `al_edit_date` datetime NOT NULL,
      `al_edit_comment` varchar(255) NOT NULL,
      `al_small_edit` tinyint(1) DEFAULT NULL,
      `al_lesson_id` int(10) unsigned NOT NULL,
      PRIMARY KEY (`al_id`),
      KEY `al_editor_id` (`al_editor_id`,`al_lesson_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
    
    -- --------------------------------------------------------
    
    --
    -- Structure de la table `courses`
    --
    
    CREATE TABLE IF NOT EXISTS `courses` (
      `c_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `c_title_raw` varchar(80) NOT NULL,
      `c_title_formatted` varchar(80) NOT NULL,
      `c_description` varchar(255) NOT NULL,
      `c_creator_id` int(11) unsigned NOT NULL,
      `c_creation_date` datetime NOT NULL,
      `c_editor_id` int(11) unsigned DEFAULT NULL,
      `c_edit_date` datetime DEFAULT NULL,
      `c_edit_comment` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`c_id`),
      UNIQUE KEY `c_title_raw` (`c_title_raw`,`c_title_formatted`,`c_description`),
      UNIQUE KEY `c_title_formatted` (`c_title_formatted`),
      KEY `c_creator_id` (`c_creator_id`),
      KEY `c_editor_id` (`c_editor_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
    
    -- --------------------------------------------------------
    
    --
    -- Structure de la table `lessons`
    --
    
    CREATE TABLE IF NOT EXISTS `lessons` (
      `l_id` int(10) unsigned NOT NULL,
      `l_title_raw` varchar(80) NOT NULL,
      `l_title_formatted` varchar(80) NOT NULL,
      `l_description` varchar(255) NOT NULL,
      `l_content` text NOT NULL,
      `l_course_id` int(10) unsigned NOT NULL,
      `l_creator_id` int(10) unsigned NOT NULL,
      `l_creation_date` datetime NOT NULL,
      `l_editor_id` int(10) unsigned DEFAULT NULL,
      `l_edit_date` datetime DEFAULT NULL,
      `l_edit_comment` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`l_id`),
      UNIQUE KEY `l_title_raw` (`l_title_raw`,`l_title_formatted`,`l_description`),
      KEY `l_course_id` (`l_course_id`,`l_creator_id`,`l_editor_id`),
      KEY `l_creator_id` (`l_creator_id`,`l_editor_id`),
      KEY `l_editor_id` (`l_editor_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    
    -- --------------------------------------------------------
    
    --
    -- Structure de la table `users`
    --
    
    CREATE TABLE IF NOT EXISTS `users` (
      `u_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `u_email` varchar(50) NOT NULL,
      `u_email_checked` tinyint(1) DEFAULT NULL,
      `u_password` varchar(255) DEFAULT NULL,
      `u_new_password` varchar(255) DEFAULT NULL,
      `u_new_password_expires` date DEFAULT NULL,
      `u_token` char(32) DEFAULT NULL,
      `u_token_expires` date DEFAULT NULL,
      PRIMARY KEY (`u_id`),
      UNIQUE KEY `u_email` (`u_email`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
    
    --
    -- Contraintes pour les tables exportées
    --
    
    --
    -- Contraintes pour la table `archives_courses`
    --
    ALTER TABLE `archives_courses`
      ADD CONSTRAINT `archives_courses_ibfk_1` FOREIGN KEY (`ac_editor_id`) REFERENCES `users` (`u_id`) ON DELETE NO ACTION ON UPDATE CASCADE,
      ADD CONSTRAINT `archives_courses_ibfk_2` FOREIGN KEY (`ac_course_id`) REFERENCES `courses` (`c_id`) ON DELETE NO ACTION ON UPDATE CASCADE;
    
    --
    -- Contraintes pour la table `courses`
    --
    ALTER TABLE `courses`
      ADD CONSTRAINT `courses_ibfk_6` FOREIGN KEY (`c_editor_id`) REFERENCES `users` (`u_id`) ON DELETE NO ACTION ON UPDATE CASCADE,
      ADD CONSTRAINT `courses_ibfk_5` FOREIGN KEY (`c_creator_id`) REFERENCES `users` (`u_id`) ON DELETE NO ACTION ON UPDATE CASCADE;
    
    --
    -- Contraintes pour la table `lessons`
    --
    ALTER TABLE `lessons`
      ADD CONSTRAINT `lessons_ibfk_1` FOREIGN KEY (`l_course_id`) REFERENCES `courses` (`c_id`) ON DELETE NO ACTION ON UPDATE CASCADE,
      ADD CONSTRAINT `lessons_ibfk_2` FOREIGN KEY (`l_creator_id`) REFERENCES `users` (`u_id`) ON DELETE NO ACTION ON UPDATE CASCADE,
      ADD CONSTRAINT `lessons_ibfk_3` FOREIGN KEY (`l_editor_id`) REFERENCES `users` (`u_id`) ON DELETE NO ACTION ON UPDATE CASCADE;

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    J'ai non seulement lu mais exécuté le script de construction de la base, avec un message d'erreur lors de la construction des FK.
    J'ai ensuite importé la base en rétro-conception dans DBDesigner, pensant qu'une représentation graphique la rendrait plus compréhensible, mais j'avoue ne rien comprendre à l'articulation de ces 6 tables.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Je crois qu'un tour par la conception s'impose !
    Tu cherches à créer directement des tables avant d'abord le schéma de ta BDD bien dans la tête et encore moins sur le papier j'ai l'impression.

    Tu prendras bien une petite liqueur de Merise pour te donner du courage ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 99
    Points : 62
    Points
    62
    Par défaut
    je connais pas du tout merise, je fais juste des shemas E/A et relationnels pour l'instants. par contre je les fait sur papier donc pour les coller c'est pas simple ):

    Je dois faire de l'uml plus poussé plus tard dans l'année mais pas de merise , je jeterai un oeil , mais tu veux pas me dire deja ce que tu penses des 2 chemins que je décris?

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Ben fais tes schémas par ordinateur, c'est pas les outils qui manquent.
    Par exemple dbDesignor et son successeur est MySQL Workbench, disponible sur le site de MySQL.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 99
    Points : 62
    Points
    62
    Par défaut
    C'est mortel ce logiciel! merci cine lol

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/05/2014, 22h33
  2. Suggestions pour une application web-mobile
    Par Stukas dans le forum Android
    Réponses: 5
    Dernier message: 18/01/2014, 21h08
  3. Réponses: 5
    Dernier message: 30/01/2007, 13h23
  4. Réponses: 3
    Dernier message: 20/06/2006, 07h06
  5. [MySQL] Une fonction perso pour aléger le code...
    Par tsing dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 15/11/2005, 23h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo