... pour modéliser mon système.

... pour modéliser mon système. - SQL/NoSQL - Programmation

Marsh Posté le 02-08-2011 à 22:19:21    

Bonjour,
 
J'essaye de faire un truc, je n'y arrive pas.
Avec Java en modélisation orientée objet ?
Avec C++ ?
C ?
Je me demande si un SGBD ne serait pas mieux adapter.
 
En effet, j'ai N "noms" d'objets et N  "actions" sur chacun des N objets appartenant N "utilisateurs".
Ce que je ne parviens pas à modéliser concrètement avec le langage Ada en modélisation orientée objet
Mon besoin est de pouvoir tester si une action appartient à une classe pour un utilisateur.
 Si oui
     On effectue l'action sur l'objet pour l'utilisateur.
  fin si;
Ada me fournit divers SGBD
Faisable... ?
S'il vous plaît !
Merci pour vos réponses.


Message édité par Profil supprimé le 02-08-2011 à 22:31:14
Reply

Marsh Posté le 02-08-2011 à 22:19:21   

Reply

Marsh Posté le 02-08-2011 à 22:36:25    

Up !  :o

Reply

Marsh Posté le 02-08-2011 à 23:39:17    

Oui, ça ne doit pas être très compliqué d'enregistrer tout ça dans une base SQL.
Ensuite, tu récupère l'action qui correspond à tes critères.


---------------
Doucement le matin, pas trop vite le soir.
Reply

Marsh Posté le 02-08-2011 à 23:46:22    

mrbebert a écrit :

Oui, ça ne doit pas être très compliqué d'enregistrer tout ça dans une base SQL.
Ensuite, tu récupère l'action qui correspond à tes critères.


 
Ah, merci bien Mr. bebert.  :jap:  
 
Donc en gros, si mes souvenir son bon, c'est du genre !
 
 
1 create db
3 ou 4 create tablle
Des insert ou un truc du genre.
Et une requête .| ?
Merci.
 
 

Reply

Marsh Posté le 03-08-2011 à 00:18:38    

En théorie, il y a d'abord une phase de réflexion mais en pratique, oui, c'est ça :jap:  
Le SGBD fournit le stockage et le moteur d'accès mais il faut voir aussi comment tu accèdes aux données dans ton langage.


---------------
Doucement le matin, pas trop vite le soir.
Reply

Marsh Posté le 03-08-2011 à 00:57:42    

En théorie, je sais pas trop sur quoi réfléchir.
Merci pour tes réponses.

Reply

Marsh Posté le 03-08-2011 à 09:06:33    

+1 pour une modélisation dans une BD. En plus, si t'as un grand nb d'objets/actions/utilisateurs, côtés perfs, un SGBD sera bien mieux ;)
Donc nous disons :
1 table objet
1 table action
1 table utilisateurs
1 table relationnelle entre objet et action (au moins les 2 clés étrangères des 2 tables concernées)
1 table relationnelle entre entre objet et utilisateur (idem, au moins les 2 clés étrangères des tables concernées).


Message édité par rufo le 03-08-2011 à 09:07:34

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 03-08-2011 à 09:32:40    

Et bonjour rufo... Merci pour ta contribution...
Si tu as le temps, tu peux me souvenir le rôle des clef étrangère, comment on les détermine.
Pour le moment j'ai même pas les def des table principales.
Faut que je révise les SGBD.

Reply

Marsh Posté le 03-08-2011 à 10:29:24    

table "utilisateur"

  • User_id

accessoirement, j'aimerais ajouter :

  • logged

tant qu'à y être  

  • User_name
  • Password


table "object"

  • Object_id
  • Owner_id (de même type que user_id)

accessoirement, j'aimerais ajouter :

  • Address_object (ce doit être un pointeur sur un objet Ada, je ne sais pas si c'est possible et comment faire autrement).
  • Class_name (une chaine de caractère);

peut-être même un

  • Object_name


table
"action"

  • Action_id

accessoirement, j'aimerais ajouter :

  • Address_action (ce doit être un pointeur sur une une procédure Ada, je ne sais pas si c'est possible et comment faire autremen).
  • Class_name (une chaîne de caractères);
  • Action_name (une chaîne de caractères)


table "Object_from_user"

  • User_id
  • Object_id


table "action_from_object"

  • Object_id
  • Action_id

Message cité 1 fois
Message édité par Profil supprimé le 03-08-2011 à 11:07:35
Reply

Marsh Posté le 03-08-2011 à 10:38:19    

une clé étrangère sert à établir une relation entre la table dans laquelle elle est définie "étrangère" et pointe sur une clé primaire d'une table. Dans el cas d'une relation 1-n ou 0-n, la clé étrangère se trouve directement dans la table à laquelle elle lie la table dont elle est issue
ex : une entreprise contient plusieurs employés.
J'ai une table entreprise avec comme clé primaire IDentreprise
J'ai une table employé avec comme clé primaire IDemployé et comme clé étrangère, IDentreprise pour me permettre d'établir la relation qu'un employé travaille dans une entreprise.
 
Ici, t'es dans le cas d'une relation n-n, il faut donc une table relationnelle qui va lier les 2 tables impliquées dans la relation (objet et action, par ex). La table objet a comme clé primaire IDobjet, la table action, la clé primaire IDaction.
Il faut une table relationnelle ObjetAction qui peut avoir une clé primaire (un entier auto incrémenté par ex, mais cette clé primaire n'est pas obligatoire) et au moins, chaque clé primaire des 2 tables. La clé primaire de cette table relationnelle peut éventuellement être la concaténation des 2 clés étrangères. Par ailleurs, si y'a d'autres infos qui caractérisent une relation objet-action, c'est dans cette table qu'il faut rajouter les champs correspondant à ces caractéristiques supplémentaires. ;)


Message édité par rufo le 03-08-2011 à 10:38:33

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 03-08-2011 à 10:38:19   

Reply

Marsh Posté le 03-08-2011 à 10:41:10    


 
C'est ça l'idée, par contre le coup de stocker des pointeurs ada en base, je le sens pas :/ Habituellement, on sérialise carrément l'objet quan don veut le stocker en BD.
 
Sinon, pour le coup de tracer si un user est loggé ou pas, on le fait pas trop dans la table users, mais plutôt dans une table de type "log" (on y trouve, par ex, la date et heure de connexion, pourquoi pas l'IP...).


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 03-08-2011 à 10:45:33    

rufo a écrit :


 
Habituellement, on sérialise carrément l'objet quan don veut le stocker en BD.


Merci rufo...  
Qu'entends tu par sérialiser les objets ?
Merci.

Reply

Marsh Posté le 03-08-2011 à 11:06:03    


 
C'est transformer sous la forme d'une chaîne de caractères les attributs d'un objet, en général sous un formalisme qui ressemble beaucoup au JSON.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 03-08-2011 à 11:14:33    


Mais heu ! Je vais jamais savoir faire ça.[:tceupa]  
edit : en fait j'ai déjà trouver une bibliothèque Ada. [:powa]
 
Merci rufo.  :jap:

Reply

Marsh Posté le 03-08-2011 à 18:21:28    

Bonjour ou re-
 
Que faut-il faire avant de pouvoir se connecter à une base de donnée.
Peut-être la créer ? Mais comment ?
J'ai installé MySql-server-5.0.0, j'ai entré un mot de passe, j'ai oublié de noter le nom pour l'administration  :cry:  
Et après dans mon code j'ai fais ceci :

Code :
  1. with Gnu.Db.MySQL;                       use Gnu.Db.MySQL;
  2. procedure Main is
  3.  
  4.   MySQL_Object : Gnu.Db.MySQL.Object;
  5. begin
  6.   Initialize (This => MySQL_Object);
  7.   User       (MySQL_Object, "admin" );
  8.   Password   (MySQL_Object, "" );
  9.   Connect    (this => MySQL_Object,
  10.               Server => "localhost" );


Mais j'ai une erreur MySql.Connect_Failure.
 
S'il vous plaît ?
Merci pour vos lumières.

Reply

Marsh Posté le 03-08-2011 à 18:49:55    

J'ai trouvé, pour le moment je suis l'utilisateur root.
Je renseigne le mot de passe correspondant et c'est bon.
 

Code :
  1. Initialize(This => MySQL_Object);
  2.   User(MySQL_Object, "root" );
  3.   Password(MySQL_Object, "********" );
  4.   Connect   (this => MySQL_Object,
  5.              Server => "localhost" );

Reply

Marsh Posté le 04-08-2011 à 09:32:19    

Y'a juste besoin de se connecter au serveur Mysql. Après, avec des requêtes SQL tu peux créer une BD (CREATE DATABASE), des tables (CREATE TABLE), modifier la structure d'une table (ALTER TABLE), insérer, modifier, supprimer des enregistrements dans ne table (INSERT INTO, UPDATE, DELETE)...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 04-08-2011 à 13:26:28    

Bonjour à touts, bonjour rufo, merci pour ça.
 
Je reviens sur l'analyse de mes besoins (la structure de la db),  
 
Dans ma base, Je veux :

  • Ajouter des utilisateurs ;
  • Ajouter des objets ;
  • Ajouter des actions ;


En suite, je veux savoir si un utilisateur à le droit d'effectuer une action sur une objet.
Par défaut tous les utilisateurs ont le droit d'effectuer quelques actions.
Suite à une de ces quelque actions, les utilisateurs peuvent effectuer les actions restantes.
 
Comment procéder (structurellement parlant) ?
 
Pour le moment j'ai  :
table "Users_Table"

  • User_Id INTEGER
  • User_Name VARCHAR(32)
  • User_passwd VARCHAR(32) ... pour stocker un Md5


table "Objects_Table"

  • Object_Id INTEGER
  • Object_Name VARCHAR(32)


table "Actions_Table"

  • Action_Id INTEGER
  • Action_Name VARCHAR(32)


Ma requête sera constitué de "User_Name", "Action_Name", "Object_Name" qui doit me retourner un booléen.  
 
 
Pour synthétiser,
Je prend :
la liste de verbes d'un langage naturel pour en faire des actions ;
la liste des noms   "       "           "        "     "     "     "  objets ;
J'ajoute en suite un à un les utilisateurs qui ont par défaut le droit d'effectuer les actions "créer" "construire" "générer" "produire", etc, sur quelque objet.
Suite à une des actions précédente, l'utilisateur à le droit d'effectuer toute les autres actions sur l'objet généré.
 
Vous voyer ce que j'essaye de faire ?
Merci pour vos réponses.


Message édité par Profil supprimé le 04-08-2011 à 13:46:10
Reply

Marsh Posté le 04-08-2011 à 14:05:10    

1) Pas la peine de mettre "_Table" dans le nom de tes tables, ça alourdit et on se doute bien que ce sont des tables.
 
2) préfère le sha-1 au md5 (algo cassé depuis qq années).
 
Comme dit dans mon post http://forum.hardware.fr/hfr/Progr [...] m#t2093050
 
Il te manque 2 tables de relations : une table pour stocker les relations entre objet et action et une autre entre objet et utilisateur.
 
La table obj_action est initialisée avec TOUTES les actions qu'on peut faire sur un objet donné.
 
par contre, par rapport à ce que tu dis, c'est pas une relation entre objet et utilisateur qu'il te faut, mais entre la table relationnelle obj_action et utilisateur.
 
Cette table obj_action_user est initialisée avec les seules actions que chaque utilisateur peut faire pour certains objets.
 
Du coup on se retrouve avec toujours 5 tables :
Objet : ObjID, ObjNom ...
Action : ActID, ActNom ...
Utilisateur : UtilID, UtilNom, UtilMdP ...
ObjetAction : ObjActID, ObjID, ActID
ObjetActionUtilisateur : ObjActUtilID, ObjActID, UtilID, ActionFaite
 
ActionFaite est un booléen pour dire si l'action a été effectuée ou pas.
Je pense pas qu'on puisse faire qu'une table pour la relation objet/action/utilisateur car en faisant ça, on pourrait plus lister les actions pouvant être faites sur les objets, indépendamment des droits des utilisateurs.
 
Ensuite, une fois que tes utilisateurs ont fait certaines actions, celles-ci peuvent déclencher l'ajout de nouvelles entrées dans la table ObjetActionUtilisateur permettant ainsi à un utilisateur de faire de nouvelles actions. Les actions ajoutées seront celles qui se trouve dans
la table ObjetAction et qui n'ont pas de couple [ObjActID, UtilID] dans ObjetActionUtilisateur... ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 04-08-2011 à 15:33:25    

Rufo, merci, merci bien pour ton aide. :jap:  
Je crée trois tables de données et les 2 tables de relations avec MySQL....

Code :
  1. -- Table utilisateurs, clef primaire "User_Id" ;
  2. CREATE TABLE Users
  3.   (Used_Id INTEGER NOT NULL,
  4.    User_Name VARCHAR(32) NOT NULL,
  5.    User_Passwd VARCHAR(32) NOT NULL,
  6.    PRIMARY KEY User_Id)
  7.  
  8. -- Table objects, clef primaire "Object_Id" ;
  9. CREATE TABLE Objects
  10.   (Object_Id INTEGER NOT NULL,
  11.    Object_Name VARCHAR(32) NOT NULL,
  12.    PRIMARY KEY Object_Id)
  13.  
  14. -- Table actions, clef primaire "Action_Id ;
  15. CREATE TABLE Actions
  16.    (Action_Id INTEGER NOT NULL,
  17.     Action_Name VARCHAR(32) NOT NULL,
  18.     PRIMARY KEY Action_Id)
  19.  
  20. -- Table de relation objet-action, avec deux clef étrangères : Object_Id et Action_Id
  21. CREATE TABLE ObjectAction
  22.   (ObjectAction_Id INTEGER AUTO_INCREMENT,
  23.    Object_Id INTEGER,
  24.    Action_Id INTEGER,
  25.    FOREIGN KEY (Object_Id) REFERENCES Objects(Object_Id),
  26.    FOREIGN KEY (Action_Id) REFERENCES Actions(Action_Id),
  27.    PRIMARY KEY ObjectAction_Id)
  28.  
  29. -- Table de relation objetaction-user; avec deux clef étrangères : ObejctAction_Id et User_Id
  30. CREATE TABLE ObjectActionUser
  31.   (ObjectActionUser_Id INTEGER AUTO_INCREMENT,
  32.    ObjectAction_Id INTEGER,
  33.    User_Id INTEGER,
  34.    Is_Done BOOLEAN,
  35.    FOREIGN KEY (ObjectAction_Id) REFERENCES ObjectAction(ObjectAction_Id),
  36.    FOREIGN KEY (User_Id) REFERENCES Users(User_Id),
  37.    PRIMARY KEY ObjectActionUser_Id)


 

Citation :

Ensuite, une fois que tes utilisateurs ont fait certaines actions, celles-ci peuvent déclencher l'ajout de nouvelles entrées dans la table ObjetActionUtilisateur permettant ainsi à un utilisateur de faire de nouvelles actions. Les actions ajoutées seront celles qui se trouve dans la table ObjetAction et qui n'ont pas de couple [ObjActID, UtilID] dans ObjetActionUtilisateur... ;)


 
Ce qui veux dire, qu'a chaque ajout d'un utilisateur, j'ajoute les actions primaires.
Suite à une action primaire j'ajoute les actions secondaires.
 
Ca se renseigne comment une table de relation ?
 
15 ans que j'ai pas fait de bd. :/
 
il faut que je maintienne deux groupe d'actions :

  • Un groupe d'actions primaires pouvant être effectuées par défaut avec lesquelles j'initialise la base de données pour chaque nouvel utilisateur.
  • Un groupe d'actions secondaires qui seront ajoutées automatiquement après une des actions primaire.


Je poste, je suis pomé là.

Reply

Marsh Posté le 04-08-2011 à 16:21:21    

Pour pas avoir de pb, mets comme valeur par défaut FALSE pour Is_Done dans la déf de ta table ;)
 
Ben dans l'ordre, tu remplis d'abord les 3 tables Action, user et Object.
Ensuite ObjectAction, dans laquelle tu vas mettre les couples Object_Id/Action_Id (donc l'ensemble des action possibles pour chaque objet).
Enfin, ObjectActionUser dans laquelle tu vas mettre les couples ObjectAction_Id/user_Id pour définir les actions que chaque utilisateur peut faire au départ sur certains objets, ObjectAction_Id étant trouvé en recherchant dans la table ObjectAction le couple action/objet que l'utilisateur pourra faire au début.
 
Vu qu'apparemment la notion d'action primaire (celle pouvant être faite au début par n'importe quel utilisateur) et secondaire (action faite ensuite) semble ne pas dépendre d'un algorithme/logique métier (cf ton topic sur les réseaux de neurones et d'apprentissage) va falloir ajouter un champ dans une table, voire une table.
 
Si la notion de primaire/secondaire ne dépend que du type d'action, alors, faut rajouter le champ "Type" (valeur 1 pour "primaire" et 2 pour "secondaire" ) dans la table Action.
Si cette notion dépend de l'objet et donc de l'action, faut rajouter le champ "Type" dans la table ActionObject.
Si cette notion dépend de l'utilisateur et de l'action ou carrément de l'utilisateur/action/objet, alors faut créer une table relationnelle de paramétrage avec une clé primaire auto-incrémentée, les clés primaires des tables concernées (donc 2 ou 3 clés) et le champ "Type".
 
Après, pour remplir ta table ObjectActionUser, faudra aller piocher dans la nouvelle table (ou dans le champ Type mis sur une des tables existantes) et filtrer d'abord sur la valeur 1 puis 2 ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 10-08-2011 à 16:16:35    

Bonjour rufo, bonjour à tous,
Désolé pour ma réponse tardive, un défaut d'Internet.
Merci encore rufo pour ces réponse rapide et précise.
En fait, je suis encore à me demander comment fonction mon système à ce jour.
 
Mais je profite du fil pour te demander rufo si par hasard tu saurais, et pouvais me dire pour quoi mes requêtes MySQL ci-dessus ne fonctionne pas même avec un point- virgule à la fin ?
Je doit dire que je retrouve le net à l'instant je n'ai pas cherché encore.
Je fait ces requêtes à partir d'un client Ada MySQL... et en ligne de command en exécutant mysql, ces requête ne passe pas.

Reply

Marsh Posté le 10-08-2011 à 16:35:22    

Le type INTEGER n'existe pas. Suivant la taille, tu as TINYINT (1 octet), SMALLINT (2 octets), INT (4 octets), BIGINT...
Ca donne pour ta première table

Code :
  1. CREATE TABLE `Toto`.`Users` (
  2. `User_Id` INT UNSIGNED NOT NULL ,
  3. `User_Name` VARCHAR( 32 ) NOT NULL ,
  4. `User_Passwd` VARCHAR( 32 ) NOT NULL ,
  5. PRIMARY KEY ( `User_Id` )
  6. ) ENGINE = MYISAM


 
Au passage, tu souhaites utiliser les foreign key, ça veut dire qu'il faut utiliser le moteur InnoDB (cf instruction ENGINE). Ici, je l'ai fait en Myisam. Dans une BD, tu peux mélanger les moteurs suivant les tables..
 
Je te conseille de t'installer wampserver ou un outil graphique pour construire tes tables : ça te génère le code sql ;) Dans wampserver, l'outil s'appelle phpmyadmin...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 10-08-2011 à 16:59:28    

Merci rufo.  :jap:  
 

rufo a écrit :


 
Au passage, tu souhaites utiliser les foreign key, ça veut dire qu'il faut utiliser le moteur InnoDB (cf instruction ENGINE). Ici, je l'ai fait en Myisam. Dans une BD, tu peux mélanger les moteurs suivant les tables..
 
Je te conseille de t'installer wampserver ou un outil graphique pour construire tes tables : ça te génère le code sql ;) Dans wampserver, l'outil s'appelle phpmyadmin...


 
Non, je veux pas utiliser tout ça, j'ai mis Foreign key parce que c'était l'exemple donné.
Je veux simplement lier mes tables avec mes clefs étrangères.

Reply

Marsh Posté le 10-08-2011 à 17:01:30    

ben sans les foreign key, les contraintes entre les tables devront être gérées par l'appli. C'est pas un pb en soit, faut juste en avoir conscience ;)
 
Dans ce cas, le moteur MyIsam suffit (attention, c'est pas forcément le moteur qui est mis par défaut, donc bien le préciser dans la création de tes tables avec la clause ENGINE=MYISAM).


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 11-08-2011 à 15:58:15    

Bonjour, merci rufo.
J'aurais deux questions concernant MySQL... Je suis aller à la fnac pour trouver un bouquin sur MySQL, j'ai pas trouvé, même en commande, ça peu se trouver en librairie ?
L'autre concerne l'hébergement de ma base, je ne sais pas ou elle est mais j'aurais voulu la mettre dans mon répertoire personnel qui se trouve sur le partition /home, est-ce possible ?
 
 
Edit : j'ai trouvé pour la localisation de la base. Merci.


Message édité par Profil supprimé le 11-08-2011 à 16:29:46
Reply

Marsh Posté le 11-08-2011 à 16:35:37    

Répertoire /data de mysql.
 
Pour le bouquin, pas utile, y'a l'aide en ligne ;) T'as tout sur toutes les commandes, avec des exemples. Et sur le web, pleins de tutos.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 11-08-2011 à 17:07:18    

j'ai fait ça pour la localisation de la base, j'ai déplacer /var/lib/mysql dans /home et modifier le path de datadir dans /etc/mysql.cnf
En suivant ce tuto : http://www.kitsgraphiques.net/chan [...] -tu44.html
 
Ok pour l'aide, je vais voir. Merci encore rufo.  :jap:  
En fait je suis encore dans l'intérrogation sur la structure de ma base.
Ah oui, une autre question : Peut-on faire des requetes multi-base ?
Une autre : peut-on comme sur Access mettre le contenu d'une requête dans une table ?
Merci.

Reply

Marsh Posté le 11-08-2011 à 17:44:46    

Oui, on peut faire des requêtes multi-bases, suffit que les bases soient sur le même serveur et faire précéder dans les requêtes les noms des tables du nom de la base.
Ex : SELECT... FROM BD1.table1 t1, BD2.table2 t2 WHERE...
 
Oui, on peut mettre le résultat d'une requête dans une table via INSERT INTO [TEMPORARY] TableName SELECT ..... FROM.... WHERE....
Sans la clause TEMPORARY, le résultat sera accessible à tous les users qui se connectent à la BD. Avec la clause, seul le user qui a créé la table y aura accès. Pour des questions de perfs, tu peux aussi mettre le résultat dans une table (temporaire ou pas) créée avec le moteur MEMORY (ce sont des tables qui ne sont stockées qu'en mémoire, pas sur disque). ;)
 
ps : Access, c'est pas un SGBD et c'est de la daube :o


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 11-08-2011 à 17:53:11    

[:dpenche], la conclusion !
 
Merci rufo, c'est super sympa, Je reviendrais ! [:dpenche]

Reply

Marsh Posté le 12-08-2011 à 09:03:47    


 
pas de quoi mais ma conclusion est du vécu (mon projet de fin d'études d'école d'ingé en ASP et Access, je te dis pas le nb de fois que la BD plantait et la limitation à 1 ou 2 connexions max en // :/ )


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 18-08-2011 à 23:09:05    

Bonsoir, bonsoir rufo, perso, bonsoir à tous.
 
Sans transition.
 
Mon système se transforme en jeu et si vous avez du temps je suis preneur de conseils.
 
"Je voudrais concevoir un jeu banal a priori, on partage une carte en réseau pour y placer des armes et une unité stratégique et on calcule qui gagne.
La règle exactement est simple a priori ; Tant que l'unité stratégique n'est pas détruite, on peu ajouter des armes et tirer dans la limite d'une charge maximum, si non la partie est perdu simplement. Le point stratégique est un point invisible des joueurs alors que les armes le sont. Le point stratégique est placé au début de parti et on ne peut pas le déplacer, les armes sont déplaçable."
Les armes restantes des unités stratégiques détruites sont ajouter à votre arsenal. On recherche les unités stratégique à la main ou à l'aide d'outils de recherches qu'il faudra gérer.
 
pour réaliser e jeu, je doit au moins faire une BD pour la gestion du jeu.
 
Techniqement ça ressemnble à ça pour le moment :
table user ... -- comme d'hab.avec
                   
table Wopr -- C'est l'unité stratégique.
                 (,
                  x_source : double,
                  y_source : double,
                  Charge : double;
                  -- j'hésite à inclure des information de ciblage X,Y_target qui seront produite lors des recherches de cibles.
                  User_Id int not null
                 
table Missils --  
                   (missil_id int,
                    x_source  double,
                    y_Source double,
                    charge : real,
                    x_target : double,
                    y_target : double,
                    Charged : boolean
                    Woper_Id int)
 
 
un wopr appartient à un utilisateur, et plusieurs missiles appartiennent à un wopr.
 
Vous voyez quelque chose pour m'aider.

Reply

Marsh Posté le 26-08-2011 à 14:06:13    

Bonjour, bonjour à tous, directe, je demande pas qu'on face mon boulot, mais ! J'aurais voulu quelque exemple de requête plus ou moins adapté à mes besoins, si vous voulez bien. Pour reprendre, Mais j'ai pas envi, mais faut le faire... C'est pour minuterie.
Comme vous le savez peut-être, j'ai changé d'idée initiale, mais je vais pas refaire un topic pour si peu, bref, je fais un jeu vite fait en attente de reprise du projet initial, bref...
La règles en gros.
  Tant que l'unité stratégique n'est pas détruite, on peu ajouter des armes et tirer dans la limite d'une charge maximum, si non la partie est perdu simplement.  
  Le point stratégique est un point invisible des joueurs alors que les armes le sont.
  Le point stratégique est placé au début de parti et on ne peut pas le déplacer, les armes sont déplaçable.
  Les armes restantes des unités stratégiques détruites sont ajouter à votre arsenal. On recherche les unités stratégique à la main ou à l'aide d'outils de recherches qu'il faudra gérer.
 
Voici mes tables....données par shwo cretae table de Mysql.

Code :
  1. CREATE TABLE `Users` (
  2.  `User_Id` int(11) NOT NULL AUTO_INCREMENT,
  3.  `Username` char(128) DEFAULT NULL,
  4.  `Date` date DEFAULT NULL,
  5.  `Password` char(32) DEFAULT NULL,
  6.  PRIMARY KEY  (`User_Id`)
  7. ) ENGINE=MyISAM DEFAULT CHARSET=latin1


Code :
  1. CREATE TABLE `Missils` (
  2.  `Missil_Id` smallint(6) NOT NULL DEFAULT '0',
  3.  `Wopr_Id` int(11) NOT NULL,
  4.  `Lunched` tinyint(1) DEFAULT NULL,
  5.  `X_Coordonate` double NOT NULL,
  6.  `Y_Coordonate` double NOT NULL,
  7.  `X_Target` double NOT NULL,
  8.  `Y_Target` double NOT NULL,
  9.  `Charge` double DEFAULT NULL,
  10.  PRIMARY KEY  (`Missil_Id`,`Wopr_Id`),
  11.  KEY `Wopr_Id` (`Wopr_Id`)
  12. ) ENGINE=MyISAM DEFAULT CHARSET=latin1


 

Code :
  1. CREATE TABLE `Woprs` (
  2.  `Wopr_Id` int(11) NOT NULL AUTO_INCREMENT,
  3.  `User_Id` int(11) NOT NULL,
  4.  `X_Coordonate` double NOT NULL,
  5.  `Y_Coordonate` double NOT NULL,
  6.  `Total_Charge` double DEFAULT NULL,
  7.  `Charged` tinyint(1) DEFAULT '0',
  8.  PRIMARY KEY  (`Wopr_Id`),
  9.  KEY `User_Id` (`User_Id`)
  10. ) ENGINE=MyISAM DEFAULT CHARSET=latin1


 
Dessus, je dois faire, les requêtes suivantes : (entre parenthèses, les paramètre en entrée et sortie)
Certaine de ces requêtes constitue des ensemble de requête sql, en faite, ce sont les entrées de mon ordonanceur.


      accept Player_Exist(Logname : in String;
                         Exist : out Boolean);
      accept Add_Player(Logname : in String;
                      Success : out boolean);
      accept Wopr_Exist(Logname : in String;
                      Exist : out boolean);
      accept Get_Wopr(Logname : in String;
                      Wopr : out Wopr_Type);
      accept Add_Wopr(Logname : in String;
                      Wopr : in Wopr_Type;
                      Success : out boolean);
      accept Get_Missils(Logname : in String;
                       Missils : out Missils_Vectors.Vector);
      accept Add_Missil(Logname : in String;
                       Missil : in Missil_Type;
                       Success : out Boolean);
      accept Launch_One(Logname : in String;
                       Missil_Id : in Positive;
                       Loosers : out Players_Vectors.Vector;
                       Missils : out Vector);
      accept Launch_All(Logname : in String;
                       Loosers : out Players_Vectors.Vector;
                       Missils : out Missils_Vectors.Vector);


 
Alors, déjà, est-ce que j'ai bon avec mes tables ?
Et vraiement, merci si vous pouvez me donner des exemple pour le test d'existence, un ajout et Launch, je peut compléter les info  si besoin.
Merci.
 
edit : au moins un coup de main sur la conception ...  [:chepakoi]


Message édité par Profil supprimé le 26-08-2011 à 14:16:44
Reply

Marsh Posté le 26-08-2011 à 19:06:18    

Pour le Get_Wopr par exemple, je voudrais faire une recherche sur le Username dans la table Users pour récupérer le User_Id et faire une recherche avec le User_Id dans la table Wopr en une seul requête, y a moyen ?

Reply

Marsh Posté le 26-08-2011 à 20:20:14    

Bonsoir, alors, a priori j'ai bon mais j'ai pas si bon parce que ma requête plante depuis Ada.
Alors, je sais qu'on est pas dans la cat Ada, mais c'est du SQL... [:menfin]
 

Code :
  1. SELECT * FROM Woprs WHERE User_Id = (SELECT User_Id FROM Users WHERE Username = "Mon nom" );

Reply

Marsh Posté le 26-08-2011 à 23:29:54    

Faudrait apprendre le SQL :/ Ce que tu cherches à faire s'appelle une jointure.
 
SELECT *  FROM Woprs w INNER JOIN Users u ON (w.User_Id = u.User_Id) WHERE u.Username = 'Mon nom';
 
Edit : mettre *, c'est pas bien dans le SELECT :/

Message cité 1 fois
Message édité par rufo le 26-08-2011 à 23:30:19

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 26-08-2011 à 23:55:59    

rufo a écrit :

Faudrait apprendre le SQL


C'est ce que je fait. Merci rufo.
 
J'ai pas compris ce que font w et u...
 
Mais ma requête, elle est pas bonne, c'est pas pareil ?

Reply

Marsh Posté le 28-08-2011 à 22:36:43    

u et w sont des alias pour les tables, ça permet de nommer les champs plus rapidement (moins de lettres à taper ;) ) Ta requête est moins lisible que la mienne et niveaux perfs, pourrait être plus lente car tu passes par une sous-requête. L'optimiseur de mysql pourrait ne pas le voir et laisser exécuter cette sous-requête inutile...
 
Par contre, niveau résultat, elle devrait sortir au moins une ligne...


Message édité par rufo le 28-08-2011 à 22:36:53

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 28-08-2011 à 22:45:45    

Merci rufo pour ça...
 
Finalement je me suis fait un gestionnaire de données maison. Trop compliquer à porter un SGBD, MysSQL encore, mais postgresql, bref, j'ai abandonée ma dépendance à un SGBD, peut-être reviendrais-je sur ma décision...

Reply

Marsh Posté le 29-08-2011 à 11:53:55    

Pas une bonne décision à mon avis :/ Un sgbd est bien plus performant pour gérer des données, surtout que les dévs qui ont codé mysql sont vraiment très bons ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed