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

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : décembre 2018
    Messages : 3
    Points : 4
    Points
    4

    Par défaut Base de données Gestion de fichiers vidéos

    Bonjour, je suis bidouilleur informatique et je cherche à créer un système de gestion de films, séries, dessins animés et autres vidéos.

    Avant toutes choses, je tiens à signaler que je ne compte rien faire d'illégal, il n'y aura aucun partage ni diffusion de ces œuvres au public, tout est de l'ordre de l'utilisation personnelle et familiale.

    En gros, c'est un disque dur externe qui contient environ 20 000 fichiers vidéos, avec installé dessus une version portable d'un logiciel permettant d'émuler un site internet localement . Un site codé en php dessus permet de trier les vidéos, de renommer les fichiers de manière intelligente, de les lire. Le site détecte les dossiers et les fichiers déjà présents dans le disque dur et utilise le nom des dossiers et des fichiers pour travailler actuellement.

    Je souhaite ajouter de nouvelles fonctionnalités, mais pour les mettre en place, j'ai besoin d'une base de données SQL (sqlite3 pour être précis), le problème étant que je suis une bille dans le domaine. J'ai besoin de votre aide pour déterminer la structure de la base de données.



    Je dois sauvegarder:
    - des utilisateurs (environ 5 utilisateurs).
    - des informations de vidéos.
    - des informations de série télé.
    - des commentaires, marque-pages, historique d'utilisation.


    Les vidéos ont toutes:
    A1- Un seul nom de fichier
    A2- un seul format (mp4, ogg, avi)
    A3- une seule qualité (480p,720p)
    A4- une seule durée (20 minutes, 1h30)
    A5- un seul langage (français, anglais)
    A6- un seul type (Film / Série télé / Manga)
    A7- un seul nombre de visionnages
    A8- une seule description

    A9- plusieurs commentaires d'utilisateurs
    A10- plusieurs marques pages
    A11- plusieurs signalements de problème (format non compatible avec le lecteur, vidéo placée au mauvais endroit) envoyés par les utilisateurs.

    Les vidéos sont parfois:
    A12- Un film seul
    A13- Une partie de trilogie de films (ou quadrilogie, etc...)
    A14- Un épisode de série télévisée / Manga

    A15- Si c'est un film, il possède une vignette (un lien vers une image)
    A16- Si c'est un film, il possède un synopsis (une description textuelle du film)

    A17- S'il fait partie d'une trilogie c'est un film, et il possède en plus un numéro indiquant son ordre dans la trilogie (1, 2 ou 3) ainsi qu'un ID de trilogie permettant d'accéder au reste de la trilogie.
    A18- S'il est un épisode d'une série ce n'est pas un film, il possède un numéro d'épisode, un numéro de saison, ainsi qu'un ID de série permettant d'accéder au reste des épisodes de la série.

    Les utilisateurs ont tous:
    B1- Un seul pseudo

    B2- Plusieurs vidéos favorites

    B3- Un historique de navigation contenant les infos de chacune des vidéos qu'il a regardées:
    - L'ID de la vidéo regardée
    - Le temps de visionnage de cette vidéo
    - Le moment de la vidéo auquel il s'est arrêté de regarder (Pour pouvoir relancer la vidéo directement)


    Les Trilogies ont toutes :
    C1- Un nom
    C2- La liste des films qu'elles contiennent (et leurs ID)


    Les séries ont toutes :
    C3- Un nom
    C4- une vignette
    C5- La liste des saisons qu'elles contiennent (1 par défaut) (et leurs ID)

    Les saisons ont toutes :
    C6- Un numéro
    C7- La liste des vidéos qu'elles contiennent (et leurs ID)
    C8- Une série à laquelle elle appartient


    C'est à peu près tout. C'est un projet totalement personnel principalement dans le but d'apprendre (il faut bien l'avouer, mettre des commentaires en dessous de la vidéo s'il n'y a que moi pour les lire, ce serait de l'overkill autrement).

    Je m'excuse d'avance, j'ai lu quelques uns des topics du forum et j'ai tenté de faire quelque chose d'à peu près clair, mais il faut bien l'avouer, je n'ai pas tout compris.
    J'ai noté des mots comme "héritage" et "jointure" (mais je ne suis pas bien sûr à 100% de ce que je dois en faire). J'ai principalement besoin de connaître les concepts / techniques à utiliser, un petit exemple d'où je dois les utiliser sur ma liste.
    J'imagine qu'il y a une histoire d'héritage entre vidéo et films, une histoire de jointure entre vidéo et commentaires, mais j'ai besoin de quelqu'un qui s'y connaisse pour me donner les grandes lignes qui me permettront de savoir où chercher sans me fourvoyer ni me perdre dans la masse d'informations.
    Je n'avais pas forcément dans l'idée de faire de jolis schémas, mais il semblerait que ça pourrait s'avérer très pratique.

    Je vous remercie beaucoup d'avoir pris le temps de me lire, je serai heureux de lire vos réponses et ce même s'il on me "gronde" sur ma manière de mettre en forme (c'est la première fois que j'entends parler de règles de gestions).

  2. #2
    Modérateur
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    16 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    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 010
    Points : 31 728
    Points
    31 728
    Billets dans le blog
    5

    Par défaut

    Bonjour,
    C'est rare d'avoir une description aussi complète !

    Pour bien modéliser les données, je vous recommande d'utiliser un logiciel de modélisation. Il en existe des gratuits tels que JMerise (plus tout à fait gratuit, cependant, voir sur le site) ou DBMain.

    J'imagine qu'il y a une histoire d'héritage entre vidéo et films
    Vous imaginez bien.

    Votre entité-type de base est la "video".

    On peut écrire la règle de gestion suivante :
    R1 : Un film est une vidéo et une vidéo peut être un film.

    Il en découle le morceau de MCD suivant, représenté ici en format textuel mais facilement transposable dans votre logiciel de modélisation.
    Film -(1,1)----être----0,1- Video

    Remarques :
    1) Les noms des entités-types sont au singulier car ils sont issus de la règle de gestion qui décrit l'association respectivement pour UN film et UNE vidéo. C'est une bonne habitude à prendre qui peut éviter des confusions dans la nature du contenu de l'entité-type puis de la table qui en découle.
    Il n'y a pas non plus d'accent à Video parce que si on génère le code de construction des tables à l'aide du logiciel de modélisation, un accent dans un nom d'objet de base de données peut poser des problèmes selon le SGBD utilisé. D'une manière générale, on n'utilise que des lettres et le caractère de soulignement, éventuellement des chiffres, dans les noms des objets de bases de données (tables, colonnes...).

    2) Les cardinalités entre parenthèses signifient que Film est identifié relativement à Video. Cela veut dire qu'un film aura pour identifiant celui de la vidéo ; l'entité-type Film n'a pas d'identifiant propre dans le MCD.

    3) Nous sommes ici dans le cas typique d'un héritage de données. L'entité-type Film hérite de Video. Toutes les propriétés de Video s'appliquent à Film mais Film peut avoir des propriétés spécifiques que n'ont pas toutes les vidéos.

    Passons à la génération des tables, issues de ce morceau de MCD :
    te_video_vid (vid_id, vid_nom_fichier, vid_duree... [colonnes communes à toutes les vidéos])
    th_film_flm (fml_id_video, flm_vignette, flm_synopsis... [colonnes spécifiques aux films])

    Remarques :
    4) J'utilise ici une "norme" de nommage inspirée de celle de SQLPro.
    C'est, à l'usage, pratique de savoir immédiatement de quelle table provient telle colonne grâce au trigramme en préfixe du nom de colonne qui correspond au trigramme en suffixe du nom de table.
    te_ : table issue d'une entité-type principale du MCD.
    th_ : table d'héritage.

    5) Les clés primaires sont soulignées et la clé étrangère est en italique.

    6) Vous voyez que, dans le cadre de l'héritage, la clé primaire de la table des films est aussi une clé étrangère référençant la table des vidéos. L'identifiant du film est celui de la vidéo.
    La colonne vid_id sera un entier auto-incrémenté mais la colonne flm_id_video sera un entier simple.


    Avec ce premier exemple et en vous aidant de mon article sur les règles de gestion, je vous laisse commencer votre MCD.
    Ne mettez pas tout de suite toutes les propriétés dans les entités-types. Certaines de celles que vous avez citées pourront être en fait des entités-types de référence auxquelles seront associées les entités-types de base. C'est le cas par exemple du format. Je vous laisse y réfléchir et modéliser ça dans votre MCD.

    N'hésitez pas à proposer votre première ébauche et à poser des questions sur les difficultés que vous rencontrez.
    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 !

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : décembre 2018
    Messages : 3
    Points : 4
    Points
    4

    Par défaut

    Nom : XTREA.jpg
Affichages : 16
Taille : 144,1 Ko

    (Désolé, j'ai pas réellement pensé au fait que j'allai le partager sur un forum français, du coup j'ai tout tapé en anglais ...)

    Alors y'a deux trois erreurs du style la valeur de hst_timeSpent et timeStop doivent être à virgule, l'entité cycle qui correspond a un regroupement soit de films (trilogies) soit de saisons (séries) devrait certainement avoir un bool ou un int qui détermine s'il s'agit d'une trilogie ou d'une série, et je ne sais pas comment montrer qu'il doit contenir soit des saisons soit des films, mais pas les deux. (Enfin il y a bien des mangas comme One Piece qui ont à la fois des saisons de dessins-animés et des films d'animation à côté, je me demande comment je vais gérer ce genre de cas).
    (De toutes façons je vais devoir tout recommencer puisque JMerise limite trop la version gratuite et que je n'aime pas le système d'abonnement [J'ai du ruser pour détourner les limites, est-ce que ça se voit?]. Y a t'il un logiciel d'utilisation aussi simple que Jmerise (Je n'ai pas réussi à utiliser DB-main) sans système d'abonnement et à un prix raisonnable (moins de 30€) pour les particuliers voire même utilisation commerciale?)
    Est-ce que mon modèle est juste ? Presque juste ? Très loin de l'être ?

    Quelqu'un m'a dit de peut-être me renseigner sur le concept de BDD multidimensionnelle en me disant que j'en aurai peut-être besoin si je devais faire certains genres d'analyse pour être capable de recommander du contenu aux utilisateurs en fonction de leurs goûts. Je ne compte pas m'embarquer dans ce genre de choses dans l'immédiat, mais est-ce que je dois prévoir certaines choses afin que ma BDD soit upgradable plus tard dans le cas ou j'en aurai besoin?

    En tout cas, j'étais un peu sceptique au debut, mais les logiciels de modélisation, c'est incroyablement pratique.
    Je vous remercie énormément pour l'aide que vous m'avez déjà apportée.

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : décembre 2018
    Messages : 3
    Points : 4
    Points
    4

    Par défaut

    Voila le schema que j'ai en tête finalement :

    Nom : mcd.PNG
Affichages : 9
Taille : 82,8 Ko

    Est-ce que mon ébauche ressemble à quelque chose d'à peu près juste ?

    J'ai aussi quelques difficultés (indiquées en rouge sur l'image).

    1)Une vidéo peut être un film et un film est une vidéo.
    2)Une saison peut contenir plusieurs vidéos qui ne sont pas des films, et une vidéo qui n'est pas un film peut être contenu dans une seule saison.
    3)Une série peut contenir plusieurs saisons et une saison est forcément contenue dans une seule série.
    4)Une trilogie peut contenir plusieurs films et un film peut être contenu dans une seule trilogie.
    5)Une franchise peut contenir plusieurs films et un film peut être contenu dans plusieurs franchises.
    6)Une franchise peut contenir plusieurs trilogies et une trilogie peut être contenue dans plusieurs franchises.
    7)Une franchise peut contenir plusieurs séries et un série peut être contenue dans plusieurs franchises.
    8)Une franchise peut contenir plusieurs autres franchises et être contenue dans plusieurs autres franchises (mais ne peut pas se contenir elle-même / être contenue par elle-même).

    Je ne sais pas comment mettre en place ce genre de limitation.

    De plus, quand je jette une œil au SQL qui découle de tout ça, il y a quelque chose que je pense anormal dans la table vidéo, elle contient une ligne renvoyant vers son propre ID :

    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
    CREATE TABLE fileFormat(
       frm_id INT PRIMARY KEY,
       frm_name VARCHAR(8),
       frm_isSupported LOGICAL
    );
    
    CREATE TABLE commentHolder(
       cmh_id INT PRIMARY KEY
    );
    
    CREATE TABLE userAccount(
       usr_id INT PRIMARY KEY,
       usr_nick VARCHAR(16),
       cmh_id INT REFERENCES commentHolder(cmh_id)
    );
    
    CREATE TABLE container(
       ctn_id INT PRIMARY KEY,
       ctn_name VARCHAR(50),
       ctn_thumbnail VARCHAR(50),
       ctn_synopsis TEXT,
       cmh_id INT REFERENCES commentHolder(cmh_id)
    );
    
    CREATE TABLE trilogy(
       ctn_id INT REFERENCES container(ctn_id) NOT NULL,
       PRIMARY KEY(ctn_id)
    );
    
    CREATE TABLE serie(
       ctn_id INT REFERENCES container(ctn_id) NOT NULL,
       PRIMARY KEY(ctn_id)
    );
    
    CREATE TABLE season(
       ctn_id_1 INT REFERENCES container(ctn_id) NOT NULL,
       PRIMARY KEY(ctn_id_1),
       ctn_id INT REFERENCES serie(ctn_id) NOT NULL
    );
    
    CREATE TABLE franchise(
       ctn_id INT REFERENCES container(ctn_id) NOT NULL,
       PRIMARY KEY(ctn_id)
    );
    
    CREATE TABLE comment(
       cmy_id INT PRIMARY KEY,
       cmt_txt TEXT,
       cmt_datetime DATETIME,
       usr_id INT REFERENCES userAccount(usr_id) NOT NULL,
       cmh_id INT REFERENCES commentHolder(cmh_id) NOT NULL,
       cmh_id_1 INT REFERENCES commentHolder(cmh_id)
    );
    
    CREATE TABLE video(
       vid_id INT PRIMARY KEY,
       vid_fileName VARCHAR(50),
       vid_length INT,
       vid_viewCount INT,
       vid_description TEXT,
       vid_id_1 INT REFERENCES video(vid_id),
       ctn_id INT REFERENCES season(ctn_id_1),
       usr_id INT REFERENCES userAccount(usr_id) NOT NULL,
       frm_id INT REFERENCES fileFormat(frm_id) NOT NULL,
       cmh_id INT REFERENCES commentHolder(cmh_id)
    );
    
    CREATE TABLE historyEntry(
       hst_id INT PRIMARY KEY,
       hst_date DATETIME,
       hst_timeSpent DECIMAL(15,2),
       hst_timeStop DECIMAL(15,2),
       vid_id INT REFERENCES video(vid_id) NOT NULL,
       usr_id INT REFERENCES userAccount(usr_id) NOT NULL
    );
    
    CREATE TABLE movie(
       vid_id INT REFERENCES video(vid_id) NOT NULL,
       PRIMARY KEY(vid_id),
       mov_thumbnail VARCHAR(50),
       mov_synopsis TEXT,
       ctn_id INT REFERENCES trilogy(ctn_id)
    );
    
    CREATE TABLE contain_4(
       vid_id INT REFERENCES movie(vid_id) NOT NULL,
       ctn_id INT REFERENCES trilogy(ctn_id) NOT NULL,
       ctn_id_1 INT REFERENCES serie(ctn_id) NOT NULL,
       ctn_id_2 INT REFERENCES franchise(ctn_id) NOT NULL,
       PRIMARY KEY(vid_id, ctn_id, ctn_id_1, ctn_id_2)
    );
    
    CREATE TABLE contain_6(
       ctn_id INT REFERENCES franchise(ctn_id) NOT NULL,
       ctn_id_1 INT REFERENCES franchise(ctn_id) NOT NULL,
       PRIMARY KEY(ctn_id, ctn_id_1)
    );

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