Est-ce une bonne modelisation de table?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Est-ce une bonne modelisation de table?

par momox » 24 févr. 2006, 14:29

Ah ok, je comprends mieux, je suis un peu long a la détente sur ce coup la car je ne connaissais pas les liaisons! :oops:
Ca fait rien, maintenant j'ai saisi le principe et je vais l'appliquer du mieux que je le peux!
@+

par Cyrano » 24 févr. 2006, 11:11

Je vais essayer de t'expliquer sur la base d'un exemple simple, à toi d'adapter par la suite.

Imaginons un système de nouvelles basique. Nous identifions deux entités: les nouvelles d'une part, les auteurs de l'autre. Chacune de ces entités a ses propres propriétés :
  • Les nouvelles
    • Identifiant
    • date et heure de publication
    • titre
    • texte
  • Les auteurs
    • identifiant
    • nom
    • prenom
    • pseudonyme
Sur la base de ce schéma, nous pouvons établir une relation : un auteur peut publier 0 à n nouvelle(s)
Une nouvelle appartient à un auteur et un seul
Nous aurons donc logiquement à ajouter dans les nouvelles l'identifiant de l'auteur pour retrouver celui-ci et en afficher les informations lorsque nous afficherons une nouvelle.

Ceci va donner le schéma suivant :

Code : Tout sélectionner

+-------------+ +-----------------+ | nouvelles | | auteurs | +-------------+ 1:1 /¯¯¯¯¯¯¯¯¯¯¯¯¯¯\ 0:n +-----------------+ |identifiant |-----------------------------------|identifiant | |date_heure | \______________/ |nom | |titre | |prenom | |texte | |pseudonyme | +-------------+ +-----------------+
Ça, c'est ce qu'on appelle le modèle conceptuel de données : pour l'instant, on inscrit pas de clés étrangères, ce ne sont pas encore des tables et des champs mais des entités et des propriétés.

Lorsque nous allons passer au modèle physique, nous allons retrouver les éléments permettant les relations entre nos deux entités:

Code : Tout sélectionner

+-------------------------+ +----------------------------+ | nouvelles | | auteurs + +-----------+---------+---+ +---------------+--------+---+ |nouv_id |INT |PK | |aut_id |INT |PK | |aut_id |INT |FK |<----------------|aut_nom |VA(64) | | |nouv_date |DATETIME | | |aut_prenom |VA(64) | | |nouv_titre |VA(255) | | |aut_pseudo |VA(32) | | |nouv_texte |TEXT | | +---------------+--------+---+ +-----------+---------+---+
Maintenant nous avons nos deux tables avec une clé étrangère (FK) dans la table des nouvelles.

Pour extraire une nouvelle en ayant également les informations sur son auteur, nous aurons une requête comme ceci:

Code : Tout sélectionner

SELECT nouv_titre, nouv_texte, nouv_date, aut_pseudo FROM nouvelles, auteurs WHERE auteurs.aut_id = nouvelles.aut_id AND nouv_id = 1
Est-ce que tu saisis mieux le principe général ?

par momox » 24 févr. 2006, 09:00

Image
Donc, en faisant sur la table montrée ci dessus
<?php
$req_news = mysql_query(SELECT vagao_members_member_id, nickname, news_id, news_content, news_title FROM vagao_news WHERE news_id = `1`)
?>
Cela me selectionnera t'il le pseudo du membre dont l'id correspond a l'id contenue dans vagao_members_member_id ou est ce que je dis une connerie une fois de plus?
@+

par Cyrano » 23 févr. 2006, 10:48

Dans la mesure où tu as en clé étrangère la clé primaire de ta table membre, je dirais non puisque tu peux retrouver l'auteur en faisant une jointure des deux tables avec cette clé : elle sert à ça.

par momox » 23 févr. 2006, 08:26

Et pour finir, est ce que je dois mettre un champ news_auth dans ma table news?
@+

par Cyrano » 22 févr. 2006, 21:35

Non, tu ne saisis pas.

Tu as besoin d'avoir la clé primaire dans la table des membres et cette même valeur en clé étrangère dans la table news. Mais la clé étrangère n'a pas besoin d'être présente deux fois dans la table news.

par momox » 22 févr. 2006, 21:28

Et après comment ferais-je pour recuperer le pseudo du membre en ayant juste l'id de stockée dans ma table news?
@+

par Cyrano » 22 févr. 2006, 20:42

Tu pose mal la question : tu dois établir une relation entre membre et news. Une, pas deux. Tu n'as pas besoin de deux fois la même clé étrangère dans une table. Regarde bien ton modèle.

par momox » 22 févr. 2006, 20:03

Faut iil donc que je fasse juste une liaison entre id_membre et news_auth_id?
Je ne vois pas en quoi ca va me permettre de recuperer le pseudo qui correspond a l'id...
@+

par Cyrano » 22 févr. 2006, 18:22

tout juste ;)

par momox » 22 févr. 2006, 09:14

J'ai l'impression d'avoir localisé ma gaffe...
Au niveau de chaque liaison, il se trouve que l'on retrouve a chaque fois ltcf_members_member_id et ce deux fois..
Est-ce de cela dont tu parlais?
@+

par momox » 22 févr. 2006, 01:22

Je ne vois pas de quoi tu parles...
Le forum est séparé du systeme de news!
@+

par Cyrano » 22 févr. 2006, 01:20

Tu as des doublons dans les relations avec les tables news et forum_topic: supprimes-en un pour chaque table et ça commencera à avoir beaucoup d'allure. :)

Re: Est-ce une bonne modelisation de table?

par momox » 22 févr. 2006, 01:16

Voila ce que j'ai fait, mais dans les parametres des liaisons je suis un peu perdu...
Voila a quoi ressemble ma bdd pour le moment:
Image
Voila ensuite a quoi ressemble les parametres de toutes mes liaisons:
Image
Merci d'avance

par momox » 22 févr. 2006, 01:05

Donc je fais l'inverse de ce que j'ai fait!
C'est ca?
@+