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

Langage SQL Discussion :

Schéma base de donnée


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 15
    Points : 12
    Points
    12
    Par défaut Schéma base de donnée
    Bonjour,

    dans le cadre de developpement d'une application sur Iphone de gestion de documents j'ai décidé d'utiliser une base de donnée embarquée (sqlite).
    Mon problème consiste a modéliser une gestion de documents avec les definitions suivantes :

    Je peux avoir de 0 a n documents
    1 document est constitué de plusieurs pages rangées dans un certain ordre
    on peut modifier l'ordre des pages dans un document.
    1 document a obligatoirement une page.
    1 document peut avoir une liste de mots clés optionels (keywords)
    1 page est en fait une image jpeg.
    1 page a obligatoirement une image et une miniature (thumbnail)

    on se réfère a chaque document par un nom du genre "0812345675.jpg" qui correpond en fait a la date et l'heure a laquelle ce document a été crée mais formaté dans une unité particulière.

    Donc je ne suis pas un expert en base de donnée et j'ai pondu ca :

    2 tables : documents et pages définis de la manière suivante :

    * documents *
    doc_id INTERGER (PRIMARY KEY)
    name VARCHAR
    keywords VARCHAR

    * pages *
    page_id INTEGER
    document_id INTEGER
    page_number INTEGER
    image_data BLOB
    thumbnail_data BLOB

    c'est très simple je sais mais j'aimerais vos conseils/critiques si nécessaires sinon je partirais la dessus.
    Je pensais également créer une table supplémentaire pendant un moment faisant le lien entre une page et un document du genre :

    document_toc
    doc_id INTEGER
    page_id INTEGER

    et enlever donc le champ document_id de la table pages mais au final je sais pas si ca sert a qque chose.

    Ensuite si qqu'un peut me donner les requetes SQL suivantes :

    Récuperer toutes les pages appartenant au document référencé par on champ name.

    Merci

  2. #2
    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
    Ta colonne keywords est multivaluée, ce qui viole les règles de normalisation des bases de données relationnelles (formes normales).

    1 document peut avoir une liste de mots clés optionels (keywords)
    J'écrirais plutôt :
    1 document peut avoir des mots clés optionels (keywords)

    Ce qui donne la relation :
    Document -0,n----Avoir----0,n- Mot_clef

    Et donc une table des mots clés et une table associative entre les mots_clés et les documents.
    J'ai supposé ci-dessus qu'un mot clé pouvait être attribué à plusieurs documents bien sûr, ce qui permettra de rechercher facilement tous les documents qui sont en rapport avec un mot-clé donné.
    Keyword (K_Id, K_Word)
    Keyword_Document (KD_IdDocument, KD_IdKeyword)

    Généralement, on évite de stocker des fichiers directement en BDD dans des colonnes de type BLOB. C'est mageur de ressources. Ce type est à réserver de préférence à certaines applications qui en ont vraiment besoin, telle que la géomatique.
    Il vaut mieux stocker le lien vers le fichier.

    Je pensais également créer une table supplémentaire pendant un moment faisant le lien entre une page et un document du genre :

    document_toc
    doc_id INTEGER
    page_id INTEGER

    et enlever donc le champ document_id de la table pages mais au final je sais pas si ca sert a qque chose.
    Ca voudrait dire qu'une page peut faire partie de plusieurs documents.

    Ensuite si qqu'un peut me donner les requetes SQL suivantes :

    Récuperer toutes les pages appartenant au document référencé par on champ name.
    Tu as cherché un peu ?
    Un début de requête à nous proposer ?
    Ce n'est pas très compliqué, il faut juste utiliser une jointure entre tes deux tables.
    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 !

Discussions similaires

  1. multilingue schéma base de données pour application web
    Par nassim75 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 23/05/2013, 16h34
  2. Nettoyage schéma base de données
    Par jojo971 dans le forum Oracle
    Réponses: 2
    Dernier message: 23/10/2012, 10h08
  3. Schéma base de données
    Par LeGnome12 dans le forum MySQL
    Réponses: 3
    Dernier message: 23/01/2011, 14h24
  4. Réponses: 2
    Dernier message: 26/06/2009, 14h23
  5. Annotations Hibernate et schéma Base de données MySQL
    Par bdtatr dans le forum Hibernate
    Réponses: 1
    Dernier message: 08/07/2007, 07h12

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