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

Langage SQL Discussion :

Clé étrangère avec valeur nulle possible


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 86
    Points
    86
    Par défaut Clé étrangère avec valeur nulle possible
    Bonjour à tous,

    j'ai deux tables : une table personne et une table habitation. La table habitation peut être une maison ou un appartement et la table personne peut être le propriétaire ou le locataire de l'habitation.
    En partant du principe que l'habitation possède 1 propriétaire et possède 0 ou 1 locataire, j'arrive au schéma suivant :


    Une liaison 0..1--1..n entre id de personne et id_proprietaire de habitation
    Une liaison 0..1--0..n entre id de personne et id_locataire de habitation

    Mes questions sont les suivantes :
    Avec le schéma suivant, si l'habitation ne possède pas de locataire, la clé sera à null. Est-ce que c'est problématique ? Si oui, comment résoudre ce problème ?

    Merci d'avance de votre aide.

  2. #2
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 144
    Points : 7 388
    Points
    7 388
    Billets dans le blog
    1
    Par défaut
    Descends au niveau du MPD, et tu auras la vision plus claire :

    Ce que tu modélises, c'est ça :

    Personne
    ----------
    id
    nom

    Habitation
    ----------
    id
    nom
    proprietaire_id -> personne.id
    locataire_id -> personne.id (nullable)

    Ok, c'est bien.

    Mais maintenant, QUID d'une collocation ?
    Comment gères-tu des données complémentaires telles que :
    - Anciens propriétaires
    - Anciens locataires
    - Prix du loyer
    - Durée du bail
    - etc.

    Il vaut donc mieux passer par deux nouvelles entités, qui servirons de tables de jointures, éventuellement valuées :

    Personne
    ----------
    id
    nom

    Habitation
    ----------
    id
    nom

    Propriete
    ----------
    id
    habitation_id
    proprietaire_id
    date_achat
    prix_achat
    duree_pret

    Location
    ----------
    id
    habitation_id
    locataire_id
    date_debut
    date_fin (nullable, ou pas)
    duree_bail
    loyer

    La seule donnée nullable ici, pour moi, c'est la date de fin de location, même si on peut faire une pirouette en partant du principe que la date de fin est la prochaine date anniversaire du bail, sous réserve d'une prolongation de la location.
    On ne jouit bien que de ce qu’on partage.

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 059
    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 059
    Points : 38 269
    Points
    38 269
    Billets dans le blog
    9
    Par défaut
    Il manque 1 ou 2 tables issues de la relation entre l'entité personnes et l'entité habitations

    - table du lien de possession entre personne et habitation
    - table du lien de location entre personne et habitation

    Ces 2 tables peuvent ne faire qu'une si les attributs sont de même nature pour les 2 relations, en ce cas il faudra ajouter une colonne type de lien

    Avec cette ou ces tables supplémentaires, plus de problème, si ligne il y a alors la clef sera non nulle, si pas de locataire alors pas de ligne et donc pas de clef nulle

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 792
    Points : 34 013
    Points
    34 013
    Billets dans le blog
    14
    Par défaut
    Comme je l'explique dans mon blog, une association 0,1 - 0,n ou 0,1 - 1,n demande la création d'une table associative.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 86
    Points
    86
    Par défaut
    Merci pour votre aide. Comme je ne prend pas en compte les colocations et les copropriétés et qu'une habitation possède obligatoirement un propriétaire, les informations concernant la propriété sont intégrées à la table habitation.

    J'obtiens le résultat suivant :

    Personne
    ----------
    id
    nom

    Habitation
    ----------
    id
    nom
    id_proprietaire

    Location
    ----------
    id_habitation (PK)
    id_locataire
    date_debut
    date_fin
    loyer

    Je connaissais déjà ton blog CinePhil, il est d'ailleurs dans mes marques pages. Il m'a été d'une grande utilité pour la conception de ma base de données actuelle.

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

Discussions similaires

  1. [PostGreSLQ] pb d'UPDATE avec valeur NULL
    Par mellie dans le forum Langage SQL
    Réponses: 3
    Dernier message: 06/03/2006, 11h03
  2. Calcul de stock avec valeure null
    Par nideux dans le forum Access
    Réponses: 3
    Dernier message: 02/12/2005, 12h10
  3. locate avec valeurs nulles
    Par lol_adele dans le forum Bases de données
    Réponses: 13
    Dernier message: 17/10/2005, 14h31
  4. [JDBC] retour de requete sql avec valeur NULL
    Par maxxou dans le forum JDBC
    Réponses: 3
    Dernier message: 13/09/2004, 15h40
  5. Pb requete avec valeurs nulles
    Par James85 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 12/04/2004, 11h20

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