Le moment le plus judicieux pour l'utiliser serait s'il y avait deux concepts distincts qui ne seraient jamais liés que de cette manière. Par exemple, une voiture ne peut avoir qu'un seul conducteur actuel, et le conducteur ne peut conduire qu'une seule voiture à la fois - la relation entre les concepts de voiture et de conducteur serait donc de 1 à 1. J'accepte que cet exemple soit artificiel pour démontrer le point.
Une autre raison est que vous souhaitez spécialiser un concept de différentes manières. Si vous avez une table Personne et que vous souhaitez ajouter le concept de différents types de personne, tels que Employé, Client, Actionnaire - chacun d'entre eux nécessiterait différents ensembles de données. Les données similaires entre eux seraient sur la table Personne, les informations spécialisées seraient sur les tables spécifiques pour le client, l'actionnaire, l'employé.
Certains moteurs de base de données ont du mal à ajouter efficacement une nouvelle colonne à une très grande table (plusieurs lignes) et j'ai vu des tables d'extension utilisées pour contenir la nouvelle colonne, plutôt que la nouvelle colonne étant ajoutée à la table d'origine. C'est l'une des utilisations les plus suspectes des tables supplémentaires.
Vous pouvez également décider de diviser les données d'un même concept entre deux tables différentes pour des problèmes de performances ou de lisibilité, mais c'est un cas raisonnablement spécial si vous partez de zéro - ces problèmes se manifesteront plus tard.
Premièrement, je pense que c'est une question de modélisation et de définition de ce qui consiste en une entité distincte. Supposons que vous ayez
customers
un seul et uniqueaddress
. Bien sûr, vous pouvez tout mettre en œuvre dans une seule tablecustomer
, mais si, à l'avenir, vous lui permettez d'avoir 2 adresses ou plus, vous devrez alors refactoriser cela (pas de problème, mais prendre une décision consciente).Je peux également penser à un cas intéressant non mentionné dans d'autres réponses où le fractionnement du tableau pourrait être utile:
Imaginez, encore une fois, que vous en ayez
customers
avec un seuladdress
chacun, mais cette fois, il est facultatif d'avoir une adresse. Bien sûr, vous pouvez l'implémenter sous forme deNULL
colonnes -able telles queZIP,state,street
. Mais supposons que, étant donné que vous avez une adresse, l'état n'est pas facultatif, mais le ZIP l'est. Comment modéliser cela dans un seul tableau? Vous pouvez utiliser une contrainte sur lacustomer
table, mais il est beaucoup plus facile de la diviser dans une autre table et de rendre la clé étrangère NULLable. De cette façon, votre modèle est beaucoup plus explicite en disant que l' entitéaddress
est facultative et que leZIP
est un attribut facultatif de cette entité.la source
Pendant mon temps de programmation, je n'ai rencontré cela que dans une situation. C'est-à-dire lorsqu'il existe une relation 1 à plusieurs et une relation 1 à 1 entre les deux mêmes entités («Entité A» et «Entité B»).
Lorsque "Entité A" a plusieurs "Entité B" et "Entité B" a seulement 1 "Entité A" et "Entité A" a seulement 1 "Entité B" actuelle et "Entité B" a seulement 1 "Entité A".
Par exemple, une voiture ne peut avoir qu'un seul conducteur actuel, et le conducteur ne peut conduire qu'une voiture à la fois - la relation entre les concepts de voiture et de conducteur serait donc de 1 à 1. - J'ai emprunté cet exemple à la réponse de @Steve Fenton
Où un conducteur peut conduire plusieurs voitures, mais pas en même temps. Les entités Car et Driver sont donc 1-à-plusieurs ou plusieurs-à-plusieurs. Mais si nous avons besoin de savoir qui est le pilote actuel, nous avons également besoin de la relation 1 à 1.
la source
Un autre cas d'utilisation peut être si le nombre maximal de colonnes dans la table de base de données est dépassé. Ensuite, vous pouvez rejoindre une autre table en utilisant OneToOne
la source