Demande d'aide pour structure d'une base SQL

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 : Demande d'aide pour structure d'une base SQL

Re: Demande d'aide pour structure d'une base SQL

par moogli » 25 janv. 2011, 04:49

salut,


il va te falloir au moins 3 tables :)

pourquoi / comment ?

pourquoi : parce que c'est ce qui est le plus maintenable et que cela rentre dans les forme normale si je m'abuse ;

comment

- une table utilisateur : avec une clef primaire (idUser dans la suite)
- une table document : aussi une clef primaire (idDocument dans la suite)

Après faut voir comment tu attribut les documents à un utilisateur :
* si c'est au coup par coup il te faut juste une table qui fait la liaison entre user et document celle ci contient id,idUser, idDocument).
* si des "lots" de documents il est surement préférable de créer des groupes de documents et d'affecter un ou plusieurs groupe(s) de document à un utilisateurs (la faut 5 tables).

je ferais un truc dans ce la
-- la table utilisateurs
create table users (
	iduser int unsigned not null auto_increment,
	nom text not null,
	prenom text not null,
	motdepasse text not null,
	-- les autre strucs qui te paraisse utile
	primary key(iduser)
)type=innodb;

-- la table documents
create table documents (
	idDocuments int unsigned not null auto_increment,
	titre text not null,
	-- etc
	primary key(idDocuments)
)type=innodb;

-- solution 1 a 3 tables
create table userdocuments(
	id int unsigned not null auto_increment,
	iduser int unsigned not null,
	idDocument int unsigned not null,
	primary key(id)
	index (iduser),
    foreign key (iduser)
        references users(iduser)
        on update cascade on delete cascade
	index (idDocument),
    foreign key (idDocument)
        references documents(idDocuments)
        on update cascade on delete cascade
)type=innodb;

-- solution à 5 tables
-- les groupes de documents
create table groupes (
	idgroupe int unsigned not null auto_increment, 
	nom text not null,
	primary key(idgroupe)
)innondb;

-- le contenu des groupes
create table groupeDocuments (
	idgroupeDoc int unsigned not null auto_increment,
	idgroupe int unsigned not null,
	idDocument int unsigned not null,
	primary key(idgroupedoc)
	index (idgroupe),
    foreign key (idgroupe)
        references groupe(idgroupe)
        on update cascade on delete cascade
	index (idDocument),
    foreign key (idDocument)
        references documents(idDocuments
        on update cascade on delete cascade
)type=innodb;

-- la liaison utilisateur et groupe de document
create table usersGroupes (
	id int unsigned not null auto_increment,
	iduser int unsigned not null,
	idgroupeDoc int unsigned not null,
	primary key(id)
	index (iduser),
    foreign key (iduser)
        references users(iduser)
        on update cascade on delete cascade
	index (idgroupeDoc),
    foreign key (idgroupeDoc)
        references groupeDocuments(idgroupeDoc)
        on update cascade on delete cascade
)type=innodb;
il est possible de baser la chose sur des groupes d'utilisateurs qui auront accès a des groupes de documents :)

c'est une approche parmis beaucoup d'autre (comme l'utilisateur des groupes d'utilisateurs et de répertoire associé au groupe et on les affichent que si on fait partis du groupe).


@+

Demande d'aide pour structure d'une base SQL

par cryomike » 24 janv. 2011, 18:10

Bonjour tout le monde!

Je me permet de faire appel à vous car je débute vraiment en création de site Web, et j'ai une demande de ma direction qui parait simple, mais malheureusement je n'y arrive pas... :cry:

En fait le but à la base est simple. Nous souhaitons créer un petit site en PHP/Mysql (j'utilise Dreamweaver CS5 et EasyPHP), qui permettrait aux gens de se connecter et de pouvoir télécharger des supports de cours.

Donc l'idée est qu'il existe différents supports de cours, et que chaque utilisateur doit pouvoir accéder seulement à certains supports mais pas à tous. Là où je bloque, c'est déjà dans la création de la base SQL... Je ne sais pas si je dois créer 2 tables (une pour les utilisateurs et une autre pour les supports de cours), et comment je devrais les mettre en relations.

Exemple:

Quand l'utilisateur A se connecte, il peut voir sur sa page les liens pour les formations 1, 2, 4, et 8
Quand l'utilisateur B se connecte, il peut voir sur sa page les liens pour les formations 1, 3, 5.


Pfff, si quelqu'un pourrait me donner une piste je lui en serait plus que reconnaissant! :oops:

Et si je n'ai pas été clair dans mes explications (à force de me casser la tête là-dessus je perd la boule :roll: ), n'hésitez pas à me demander des clarifications.

Merci d'avance!