IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

PHP & Base de données Discussion :

Généralités sur les ORM


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut Généralités sur les ORM
    Bonjour à tous.

    J'ai une question qui me turlupine depuis que j'utilise l'ORM de Kohana (qui est un Framework).
    Jusqu'à lors je ne l'utilisais pas (module non activé), donc ça allait.

    Mais posons directement la question :
    Est-il normal d'être obligé de créer des clés primaires auto_increment (un seul champ en faite) sur toutes les tables ?
    En somme, de mettre des champs "id" partout.

    Avec Kohana ça m'a l'air d'être le cas, car en passant par l'ORM, il m'est (apparemment) impossible de mettre à jour une table ayant une clé primaire double zone, donc avec 2 champs.
    Genre table "articles_lang", clé primaire : (id_article, id_lang)


    Ou alors j'aurais raté un truc par là ?
    Ou serait-ce une spécificité (contrainte) propre à Kohana ?


    Autre question (accessoirement), quelle serait la meilleur convention de nommage pour les noms des champs ?
    Est-il mieux nommer id_article ou plutôt article_id ?
    (pour les clés étrangères par exemple)

    Concernant l'ORM Kohana, ça n'a pas vraiment d'importance, mais en voyant le fonctionnement, ça tendrait plutôt vers : article_id
    En faite on obtient quelque chose comme lors d'une jointure (pour exemple) :
    article_lang->id et article_lang->article->id


    Merci pour tout éclaircissement

  2. #2
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    C'est la misère

    Pour les up, je sais que c'est pas bien ... (pas taper )

    Je sais aussi que Kohana c'est pas un FW très connu/utilisé, mais pour ce qui est des autres qui on des ORM, permettent-il d'avoir des clés primaires doubles, triples, ... ?
    Ou est t'ont obligé de créer une clé unique auto_increment sur chaque table ?


    Apparemment Kohana à une propriété $_primary_key, et on ne peu pas mettre autre chose qu'une chaine, donc 1 champ.
    Je m'attendais à pouvoir mettre un tableau pour plusieurs clés.
    Du coup si je fais un Objet->create() ça va insérer selon la valeur d'1 table (la clé).
    Si la table a une clé double par exemple, et bien ça n'ira pas.


    Est-ce un comportement normal selon vous ?

  3. #3
    Expert confirmé

    Avatar de FirePrawn
    Homme Profil pro
    Consultant technique
    Inscrit en
    Mars 2011
    Messages
    3 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : Mars 2011
    Messages : 3 179
    Par défaut
    Hello,

    Bizarre ce comportement.
    J'ai pas en mémoire de problème similaire avec Hibernate (J2EE).
    Donc j'aurais tendance à dire que c'est lié à ton framework
    Avant toute chose : lire le mode d'emploi du forum et ses règles.
    Je ne réponds pas aux questions techniques en MP.

  4. #4
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Merci pour ce retour.
    Citation Envoyé par FirePrawn
    Donc j'aurais tendance à dire que c'est lié à ton framework

    Je crains que ça soit une restriction de l'ORM de ce FW.

    Après moult recherches (pas si étonnant de ne pas trouver le moindre exemple de code pour ce cas), je tombe sur ces discussions :
    How can I use joint primary keys and Kohana 3 ORM?
    KohanaPHP » Kohana v3.x » ORM
    Qui dit (entre autre) :
    Kohana doesn't support compound primary keys
    (en traduction avec GG) :
    Si quelqu'un a cette mise en œuvre proprement assez, nous pouvons la considérer, mais personnellement, je ne vois pas un usage assez commun pour ce que je suis le déplacer pour réexamen 3.3.0.

    La façon la plus simple pour sélectionner une ligne de table qui a plusieurs clés primaires est d'ajouter une colonne id auto incrémentation de la table et utiliser à la place de la clé sur plusieurs colonnes.

    Nous n'allons pas à l'inclure dans ORM de sitôt. Dans l'avenir, nous pouvons créer une nouvelle question si nécessaire pour cela.

    Du coup, j'ai une autre question :
    - Est-il mieux de créer un ID auto incrémenté dans ces cas là pour exploiter l'ORM
    - Ou vaut il mieux ne pas le faire (respecter les base des conception de Bdd) et ne pas exploiter l'ORM dans ces cas là pour faire les requêtes directement (car c'est possible, l'ORM n'est une obligation partout).


    Pour le moment j'en suis au début d'un site Web, donc rien est irréversible.
    Au feeling comme ça, je dirais qu'il serait mieux de créer un ID auto incrémenté pour exploiter pleinement l'ORM, plus particulièrement pour la partie validation (formulaire ou autre) qui prévoit de placer les règles dans le Model (ce qui évitera de les (re)définir dans le Controler dans le cas contraire.


    Tout retour sur ce point sera le bien venu.

  5. #5
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Bonjour,
    Citation Envoyé par RunCodePhp Voir le message
    Est-il mieux de créer un ID auto incrémenté dans ces cas là pour exploiter l'ORM
    - Ou vaut il mieux ne pas le faire (respecter les base des conception de Bdd) et ne pas exploiter l'ORM dans ces cas là pour faire les requêtes directement (car c'est possible, l'ORM n'est une obligation partout).
    Je vais t'éclairer un peu. Pour ce que je m'en souvienne, les moteurs de base de données gèrent automatiquement un id autonum pour absolument toutes les tables. Donc si tu ne l'affiches pas, il est quand même présent pour le bon fonctionnement de l'ensemble.
    J'ai toujours pour habitude de démarrer mes tables avec un id autonum et après je fais ma salade au niveau des index, index composés, des liens...
    D'expérience, j'ai aussi arrêté d'abuser des clés composées (sauf cas rarissimes). Il est plus simple de jouer avec une seule clé externe qu'avec un paquet.

    Pour ce qui est de l'usage d'un ORM en PHP, il faut faire attention au goulet d'étranglement dès la montée en charge.

  6. #6
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Citation Envoyé par rawsrc
    J'ai toujours pour habitude de démarrer mes tables avec un id autonum et après je fais ma salade au niveau des index, index composés, des liens...
    D'expérience, j'ai aussi arrêté d'abuser des clés composées (sauf cas rarissimes). Il est plus simple de jouer avec une seule clé externe qu'avec un paquet.
    Donc tu sous entendrais par là que cette restriction que je perçois serait un faut problème, voire à mieux concevoir les choses (plus simple, ...).

    C'est vrai que je me dis que ce ne serait pas si contraignant que ça, car rien m'empêche de créer cet ID auto incrémenté et de créer un INDEX UNIQUE pour les clés composées.
    Du coup plus de problème de doublons possible (ce qui est recherché en créant des clé primaires composées).
    Je pense que faire comme ceci devrait faire l'affaire.


    Pour ce qui est de l'usage d'un ORM en PHP, il faut faire attention au goulet d'étranglement dès la montée en charge.
    C'est la 1ère fois que je m'aventure à utiliser une ORM, et je remarque qu'on récupère beaucoup de données inutiles, sans compter que les Objets sont assez conséquents/volumineux aussi.
    Faudra faire attention c'est vrai.


    Plutôt rassurant ton intervention. Merci

Discussions similaires

  1. Généralités sur les structures de SE
    Par yooyo74 dans le forum Intelligence artificielle
    Réponses: 1
    Dernier message: 02/08/2012, 21h48
  2. [WD11] généralités sur les triggers
    Par Bowen dans le forum WinDev
    Réponses: 1
    Dernier message: 11/10/2007, 17h56
  3. [OS/390] Question généralités sur les index ?
    Par mainframe dans le forum DB2
    Réponses: 2
    Dernier message: 07/09/2006, 13h33
  4. [EJB] Généralités sur les EJB Entity
    Par drKzs dans le forum Java EE
    Réponses: 2
    Dernier message: 07/04/2006, 12h15

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