Se connecter / S'enregistrer
Votre question

creation de tables pour une base de données

Tags :
  • Sql
  • créer base de données
  • Programmation
Dernière réponse : dans Programmation
21 Novembre 2008 18:26:07

Bonjour,

Je voudrais créer un base de donner résultat. Cette base contiendra des comparaisons entres plusieurs personnes. Les résultats sont toujours sur 100%.
La comparaison peut s'effectuer entre 2 personnes minimum et 10 personnes maximum.

Je vais prendre comme exemple une actrice A qui peut être comparé à 2,3,4,8,10 autres actrices, toutes les comparaisons sont possibles. L'ordre de comparaison n'a aucune importance. Ce qui représente pour une seule actrice une centaine de comparaisons donc une centaine de résultats.

Exemple concret:

Comparaison entre l'actrice 2 et 6

actrice 2 = 60 %
actrice 6 = 40 %

Comparaison entre l'actrice 2, 6 et 8

actrice 2 = 32 %
actrice 6 = 28 %
actrice 8 = 40 %


On peut constater sur l'exemple que le résultat à changé puisque nous avons ajouté une nouvelle personne et que le résultat est sur 100%. Imaginer que le résultat est un vote. Si les propositions sont sur 2 personnes vous choisissez la personne que vous préféré, si les propositions sont sur 3 personnes votre vote vote peut changé et se retrouver sur la 3eme personne.

Important : Pour extraire les données il ne doit pas y avoir de calcul juste un système de champs pour stocker toutes ces informations. Je ne veux pas de programme pour faire un sondage je veux juste de l'aide pour créer ma base. Dans l'extrême les données pourraient même être collectées de façon manuelle et ensuite saisies pour être incorporé dans les tables.

Merci



Autres pages sur : creation tables base donnees

a c 232 L Programmation
21 Novembre 2008 18:29:19

Salut,

Est-ce que tu as déjà commencé ? Où est-ce que tu bloques ?
Tu veux qu'on te fasse tout c'est ça ? :) 
21 Novembre 2008 18:58:27

Je bloque. j'ai commencé à créer trois, quatre tables et c'est la catastrophe, je m'embrouille complètement. Je pense qu'il me faut une table personne et résultat mais comment croisé tous les résultats et les possibilités de comparaison, je ne vois vraiment pas. Je suis ouvert à toutes propositions et à toutes pistes de réflexion.
Contenus similaires
a c 232 L Programmation
21 Novembre 2008 20:47:07

Bah il faudrait montrer ce que tu as fait, on pourra alors t'aiguiller :) 

Il te faudra une table personne, une table avec les votes...

Par contre, pour ton "Important", je suis pas sûr que ce soit une bonne solution ;) 
21 Novembre 2008 21:54:46

Voila ce que j'ai commencé à écrire mais c'est loin d'être terminé. Je n'ai pas mis les contraintes. La base doit être logique car ensuite je devrait l'exporter en XML.

-- Création de la base

CREATE DATABASE `RESULTAT` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci; USE RESULTAT;


-- Création de la table Categorie

CREATE TABLE `categorie` (
`ID_Categorie` int(11) NOT NULL auto_increment,
`Nom_Categorie` varchar(255) NOT NULL default '',
PRIMARY KEY (`ID_Categorie`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


-- Création de la table Disipline

CREATE TABLE `disipline` (
`ID_disipline` int(11) NOT NULL auto_increment,
`Nom_discipline` varchar(255) NOT NULL default '',
PRIMARY KEY (`ID_disipline`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


-- Création de la table Individus

-- Position_ID sert à positionner les individus de 1 à 10 pour les récupérer dans la table comparaison et connaitre le nom des sélections par exemple le noms des actrices comparées


CREATE TABLE `individus` (
`ID_ individus` int(11) NOT NULL auto_increment,
`Nom_ individus` varchar(255) NOT NULL default '',
`Position_ID` int(2) NOT NULL,
PRIMARY KEY (`ID_ individus`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


-- Création de la table Comparaison

CREATE TABLE `comparaison` (
`ID_comparaison` int(11) NOT NULL auto_increment,
`selection1` enum('O','N') default 'N',
`Nom_ selection1` varchar(255) NOT NULL,
`selection2` enum('O','N') default 'N',
`Nom_ selection2` varchar(255) NOT NULL,
`selection3` enum('O','N') default 'N',
`Nom_ selection3` varchar(255) NOT NULL,
`selection4` enum('O','N') default 'N',
`Nom_ selection4` varchar(255) NOT NULL,
`selection5` enum('O','N') default 'N',
`Nom_ selection5` varchar(255) NOT NULL,
`selection6` enum('O','N') default 'N',
`Nom_ selection6` varchar(255) NOT NULL,
`selection7` enum('O','N') default 'N',
`Nom_ selection7` varchar(255) NOT NULL,
`selection8` enum('O','N') default 'N',
`Nom_ selection8` varchar(255) NOT NULL,
`selection9` enum('O','N') default 'N',
`Nom_ selection9` varchar(255) NOT NULL,
`selection10` enum('O','N') default 'N',
`Nom_ selection10` varchar(255) NOT NULL,
PRIMARY KEY (`ID_comparaison`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


-- Création de la table Resultat

CREATE TABLE `resultats` (
`ID_Resultat` int(11) NOT NULL auto_increment,
`ID_comparaison` int(11) NOT NULL default '0',
`Resultat1` decimal(10,0) NOT NULL default '0',
`Resultat2` decimal(10,0) NOT NULL default '0',
`Resultat3` decimal(10,0) NOT NULL default '0',
`Resultat4` decimal(10,0) NOT NULL default '0',
`Resultat5` decimal(10,0) NOT NULL default '0',
`Resultat6` decimal(10,0) NOT NULL default '0',
`Resultat7` decimal(10,0) NOT NULL default '0',
`Resultat8` decimal(10,0) NOT NULL default '0',
`Resultat9` decimal(10,0) NOT NULL default '0',
`Resultat10` int(11) decimal(10,0) NOT NULL default '0',
`Date_resultat` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`ID_Resultat`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


Merci de m'éclairer
a c 232 L Programmation
22 Novembre 2008 17:21:15

Salut,

Généralement, mettre plusieurs colonnes qui au final vont contenir le même genre de données (nom_selection1, nom_selection2, ... ; selection1, selection2, ... ; resultat1, resultat2, ...) n'est pas quelque chose de très conseillé en SQL.
Il faudrait créer des tables qui vont joindre une comparaison avec une selection, etc...
24 Novembre 2008 16:28:33

Salut OmaR,

Je vois ce que tu veux dire mais si je fais appel au forum ces que je suis un peu perdu pour la création de ces tables (pour la comparaison des résultats). Un peu plus aide concrète me serais plus profitable.

Merci
a c 232 L Programmation
25 Novembre 2008 02:12:30

Salut,

Il faudrait un peu plus de détails pour pouvoir t'aider correctement. Par exemple, tu as créé une table avec une catégorie, tu n'en parles pas, une table avec des discipline, tu n'en parles pas non plus. A quoi ça correspond ?


Imaginons avec une base de données comme celle-ci :

(Désolé pour la qualité, c'est du Paint :) )

Ca ferait 3 tables :
Table Personne : stocke toutes les personnes
Table Comparaison : contient une comparaison (donc entre 2 et 11 actrices par exemple)
Table DetailsComparaison : contient les détails d'une comparaison. Je n'ai pas mis la colonne "nb_votes", mais par exemple, pour la comparaison donnée, la personne X a 10 votes, la personne Y a 8 votes. Il y aurait au final 2 lignes pour la comparaison donnée, une ligne avec la personne X et son nombre de votes et une ligne pour la personne Y et son nombre de votes.

Est-ce que quelque chose dans ce genre peut correspondre ?

Il faudrait après voir au niveau des résultats que vous souhaitez stocker dans une table. Ca impliquerait de modifier les résultats à chaque fois qu'un vote est fait, et généralement, ça ne se fait pas trop en base de données...
25 Novembre 2008 15:52:37

Merci OmaR

Voici des exemples pour expliquer la correspondance à la table catégorie et à la table discipline.

Catégorie ( Sport, People, Politique)

Discipline (football, tennis pour le sport ou Cinéma, musique pour People).

Concernant les votes pour l'instant je ne veux pas l'intégrer, je veux juste pouvoir intégrer tous les résultats possibles. Je me demandais si dans la table comparaison je pouvais ajouter un champs du type association. Ce champs serait composer de la façon suivante :

`nbr_association` int(11) NOT NULL.

le calcul ce ferait comme en binaire 0 pour non et 1 pour oui et cette suite consulterais le résultat dans la table résultat

exemple 1 :

actrice 1, actrice 6, actrice 9

nbr_association = 1000010010

Table résultat

actrice 1 = 40
actrice 2 = null
actrice 3 = null
actrice 4 = null
actrice 5 = null
actrice 6 = 35
actrice 7 = null
actrice 8 = null
actrice 9 = 25
actrice 10 = null


exemple 2 :

actrice 4, actrice 6, actrice 8

nbr_association = 0001010100

Table résultat

actrice 1 = null
actrice 2 = null
actrice 3 = null
actrice 4 = 28
actrice 5 = null
actrice 6 = 35
actrice 7 = null
actrice 8 = 37
actrice 9 = null
actrice 10 = null


Je ne sais pas si cela peut fonctionner ?
a c 232 L Programmation
25 Novembre 2008 19:39:29

Ok, je vois pour la catégorie et la discipline, mais ça reste des choses plutôt simples je pense, donc je vous laisse le gérer ?!

En fait, là, le soucis de votre nbr_association, c'est que si un jour vous décidez qu'il peut y avoir seulement 5 actrices en même temps, ou 15 actrices en même temps, il faudra modifier toutes vos données pour pouvoir ajouter/retirer des 0 et des 1.

Là, pour moi, il faudrait faire la même chose que pour DetailsComparaison, vous créez une table Resultats qui va avoir un id, l'id de la comparaison, l'id de la personne et le résultat. Pour une personne donnée et pour une comparaison donnée, il y a une ligne.

Donc pour votre exemple 1 ça donnerait :
id : 1
id_comparaison : 1
id_personne : 1
resultat : 40
-----------------
id : 2
id_comparaison : 1
id_personne : 6
resultat : 35
-----------------
id : 3
id_comparaison : 1
id_personne : 9
resultat : 25

Et pour l'exemple 2 :
id : 4
id_comparaison : 2
id_personne : 4
resultat : 28
-----------------
id : 5
id_comparaison : 2
id_personne : 6
resultat : 35
-----------------
id : 6
id_comparaison : 2
id_personne : 8
resultat : 37


Est-ce que vous voyez le genre ?! :) 
26 Novembre 2008 19:48:56

Bonjour OmaR

Merci du coup de main, cela m'a beaucoup aider. J'ai toujours une petite inquiétude sur la table comparaison et detailcomparaison

Voici mon code est-il cohérent ?

DROP DATABASE IF EXISTS RESULTAT;

CREATE DATABASE IF NOT EXISTS RESULTAT;
USE RESULTAT;
# -----------------------------------------------------------------------------
# TABLE : RESULTATS
# -----------------------------------------------------------------------------

CREATE TABLE IF NOT EXISTS RESULTATS
(
ID_RESULTATS BIGINT(11) NOT NULL AUTO_INCREMENT ,
ID_COMPARAISON_APPARTIENT BIGINT(11) NOT NULL ,
ID_INDIVIDUS_POSSEDE BIGINT(11) NOT NULL ,
ID_COMPARAISON BIGINT(11) NULL ,
ID_INDIVIDUS BIGINT(11) NULL ,
RESULTAT BIGINT(11) NOT NULL
, PRIMARY KEY (ID_RESULTATS)
)
comment = "";

# -----------------------------------------------------------------------------
# TABLE : DETAILSCOMPARAISON
# -----------------------------------------------------------------------------

CREATE TABLE IF NOT EXISTS DETAILSCOMPARAISON
(
ID_DETAILSCOMPARAISON BIGINT(11) NOT NULL AUTO_INCREMENT ,
ID_INDIVIDUS_CONTIENT BIGINT(11) NOT NULL ,
ID_COMPARAISON_SE_COMPOSE BIGINT(11) NOT NULL ,
ID_COMPARAISON BIGINT(11) NOT NULL ,
ID_INDIVIDUS BIGINT(11) NOT NULL
, PRIMARY KEY (ID_DETAILSCOMPARAISON)
)
comment = "";

# -----------------------------------------------------------------------------
# TABLE : COMPARAISON
# -----------------------------------------------------------------------------

CREATE TABLE IF NOT EXISTS COMPARAISON
(
ID_COMPARAISON BIGINT(11) NOT NULL AUTO_INCREMENT
, PRIMARY KEY (ID_COMPARAISON)
)
comment = "";

# -----------------------------------------------------------------------------
# TABLE : DISCIPLINE
# -----------------------------------------------------------------------------

CREATE TABLE IF NOT EXISTS DISCIPLINE
(
ID_DISCIPLINE BIGINT(11) NOT NULL AUTO_INCREMENT ,
ID_CATEGORIE BIGINT(11) NOT NULL ,
NOM_DISCIPLINE CHAR(32) NOT NULL
, PRIMARY KEY (ID_DISCIPLINE)
)
comment = "";

# -----------------------------------------------------------------------------
# TABLE : CATEGORIE
# -----------------------------------------------------------------------------

CREATE TABLE IF NOT EXISTS CATEGORIE
(
ID_CATEGORIE BIGINT(11) NOT NULL AUTO_INCREMENT ,
NOM_CATÉGORIE CHAR(32) NOT NULL
, PRIMARY KEY (ID_CATEGORIE)
)
comment = "";

# -----------------------------------------------------------------------------
# TABLE : INDIVIDUS
# -----------------------------------------------------------------------------

CREATE TABLE IF NOT EXISTS INDIVIDUS
(
ID_INDIVIDUS BIGINT(11) NOT NULL AUTO_INCREMENT ,
ID_DISCIPLINE BIGINT(11) NOT NULL ,
NOM_INDIVIDUS CHAR(32) NOT NULL
, PRIMARY KEY (ID_INDIVIDUS)
)
comment = "";


# -----------------------------------------------------------------------------
# CREATION DES REFERENCES DE TABLE
# -----------------------------------------------------------------------------


ALTER TABLE RESULTATS
ADD FOREIGN KEY FK_RESULTATS_COMPARAISON (ID_COMPARAISON_APPARTIENT)
REFERENCES COMPARAISON (ID_COMPARAISON) ;


ALTER TABLE RESULTATS
ADD FOREIGN KEY FK_RESULTATS_INDIVIDUS (ID_INDIVIDUS_POSSEDE)
REFERENCES INDIVIDUS (ID_INDIVIDUS) ;


ALTER TABLE DETAILSCOMPARAISON
ADD FOREIGN KEY FK_DETAILSCOMPARAISON_INDIVIDUS (ID_INDIVIDUS_CONTIENT)
REFERENCES INDIVIDUS (ID_INDIVIDUS) ;


ALTER TABLE DETAILSCOMPARAISON
ADD FOREIGN KEY FK_DETAILSCOMPARAISON_COMPARAISON (ID_COMPARAISON_SE_COMPOSE)
REFERENCES COMPARAISON (ID_COMPARAISON) ;


ALTER TABLE DISCIPLINE
ADD FOREIGN KEY FK_DISCIPLINE_CATEGORIE (ID_CATEGORIE)
REFERENCES CATEGORIE (ID_CATEGORIE) ;


ALTER TABLE INDIVIDUS
ADD FOREIGN KEY FK_INDIVIDUS_DISCIPLINE (ID_DISCIPLINE)
REFERENCES DISCIPLINE (ID_DISCIPLINE) ;

a c 232 L Programmation
26 Novembre 2008 21:35:31

famillelulu a dit :
CREATE TABLE IF NOT EXISTS RESULTATS
(
ID_RESULTATS BIGINT(11) NOT NULL AUTO_INCREMENT ,
ID_COMPARAISON_APPARTIENT BIGINT(11) NOT NULL ,
ID_INDIVIDUS_POSSEDE BIGINT(11) NOT NULL ,
ID_COMPARAISON BIGINT(11) NULL ,
ID_INDIVIDUS BIGINT(11) NULL ,
RESULTAT BIGINT(11) NOT NULL
, PRIMARY KEY (ID_RESULTATS)
)
comment = "";


D'après les foreign key, id_comparaison_appartient est la foreign key qui pointe vers id_comparaison de la table comparaison, donc à quoi correspond id_comparaison ?!
Toujours d'après les FK, id_individus_possede est la fk qui pointe vers id_individus de la table individus, donc quelle est l'utilité de id_individus ?!
Si je vous avais mis id_comparaison et id_individus dans la table, c'était pour montrer les FK, donc pourquoi avoir ajouté 2 autres colonnes ?



famillelulu a dit :
CREATE TABLE IF NOT EXISTS DETAILSCOMPARAISON
(
ID_DETAILSCOMPARAISON BIGINT(11) NOT NULL AUTO_INCREMENT ,
ID_INDIVIDUS_CONTIENT BIGINT(11) NOT NULL ,
ID_COMPARAISON_SE_COMPOSE BIGINT(11) NOT NULL ,
ID_COMPARAISON BIGINT(11) NOT NULL ,
ID_INDIVIDUS BIGINT(11) NOT NULL
, PRIMARY KEY (ID_DETAILSCOMPARAISON)
)
comment = "";

Même chose pour DetailsComparaison


Sinon après pour moi, il n'y a pas d'incohérence :) 
8 Mai 2012 16:55:36

OmaR a dit :
Salut,

Est-ce que tu as déjà commencé ? Où est-ce que tu bloques ?
Tu veux qu'on te fasse tout c'est ça ? :) 


je veux ajouter une tables à une base de données deja créee
a c 232 L Programmation
8 Mai 2012 19:53:00

Il suffit de lire la documentation sur CREATE TABLE pour ta base de données.
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS