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

MS SQL Server Discussion :

Persistance des données avec une KEYU en FK


Sujet :

MS SQL Server

  1. #1
    Membre confirmé Avatar de Nhaps
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 350
    Points : 603
    Points
    603
    Par défaut Persistance des données avec une KEYU en FK
    Bonjour,

    J'ai un soucis d'architecture de BDD, pour vous exposer mon problème, je vais simplifier mon cas que voici :

    J'ai une base A

    A
    A_KEYU //PK
    A_NOM //Nom de ma ligne A

    Une table B

    B
    B_KEYU
    B_DATE //Date de l'enregistrement
    A_KEYU //FK de la table A

    Or voici le problème
    Si je fais un premier enregistrement le 01/01/2021, j'ai bien une ligne dans B avec la date, et un lien vers la table A dont le nom est "TOTO"
    Mais si je modifie le nom dans la table A en "TITI", alors bien évidemment le lien vers la table A me renverra le nom "TITI" a la place de "TOTO".

    Comment faire pour garder les informations de la table jointe au moment où ma ligne se crée ?

    Plusieurs idées :
    - Mettre les informations de A dans la table B, mais je trouve ca lourd.
    - Faire une table de modification de la table A pour savoir qu'elle était son état a l'instant de la création de la ligne B, je trouve ça sympa mais peut être un poil overkill
    - Autre idée que j'ignore ?

    Il y a t il une solution qui est la norme ? Quelle est LA bonne façon de faire, si il y en a une ?
    Windev 23 - SQL SERVER - PHP
    Play : TFT - Jeux indé

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 088
    Points : 38 393
    Points
    38 393
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Si le nom présent dans la table TA dépend non seulement de l'identifiant A_KEYU, mais aussi de la date (ou de tout autre colonne), alors l'avoir mis dans la table dont l'identifiant est seulement A_KEYU est une erreur de modélisation.
    Soit l'identifiant de la table TA est incomplet, soit il faut évacuer la colonne nom de cette table pour l'ajouter dans une table associative dont l'identifiant sera la PK de la personne et la date.

  3. #3
    Membre confirmé Avatar de Nhaps
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 350
    Points : 603
    Points
    603
    Par défaut
    Bonjour et merci de ta réponse.

    Non, le nom présent dans la table A ne dépend pas de la date.
    En gros, on peut imaginer une requête, qui demande, mais quel était le nom au moment de la création de la ligne B (en gros on peut voir B comme une table de logs)
    Windev 23 - SQL SERVER - PHP
    Play : TFT - Jeux indé

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 088
    Points : 38 393
    Points
    38 393
    Billets dans le blog
    9
    Par défaut
    On a donc besoin d'un historique des noms ce qui correspond à la deuxième solution.

    Il ne faut pas dupliquer le nom dans la table B, ce serait également une erreur de modélisation : le nom ne dépend pas de l'identifiant du score, il change à un rythme différent de celui de l'enregistrement des scores (ou alors c'est un cas très particulier dont il faut expliquer le contexte).
    Dupliquer le nom dans la table B reviendrait à le répéter autant de fois qu'il y a un score, même pour les personnes ne changeant jamais de nom

  5. #5
    Membre confirmé Avatar de Nhaps
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 350
    Points : 603
    Points
    603
    Par défaut
    Ok merci, c'est la solution qui me plaisait le plus, je me demandais si il y avait une autre solution mais bon tu me confortes dans mon idée, merci beaucoup
    Windev 23 - SQL SERVER - PHP
    Play : TFT - Jeux indé

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 739
    Points : 52 451
    Points
    52 451
    Billets dans le blog
    5
    Par défaut
    Au niveau de la norme SQL il y a les tables temporelle permettant l'historisation des données qui peuvent répondre à votre problématique et sont implémentées sous MS SQL Server.

    Lisez l'article que j'ai écrit à ce sujet : https://blog.developpez.com/sqlpro/p...r-presentation

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/10/2011, 22h55
  2. Réponses: 0
    Dernier message: 07/10/2011, 13h11
  3. Ajout des données avec une condition
    Par jean sami dans le forum SQL
    Réponses: 2
    Dernier message: 15/09/2008, 07h21
  4. Synchronisation des données avec une base MaxDB
    Par nicoda dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 15/03/2008, 11h53
  5. [format des données avec une procédure stockée]
    Par viny dans le forum PostgreSQL
    Réponses: 7
    Dernier message: 10/03/2005, 14h24

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