Meilleure façon d'implémenter une table de recherche de plusieurs à plusieurs avec des données intentées par l'utilisateur
-
19-09-2019 - |
Question
Dites que je souhaite que les utilisateurs choisissent une ou plusieurs méthodes de contact (e-mail, téléphone, fax, autres, etc.). Et s'ils choisissent d'autres, ils peuvent entrer leur propre méthode de contact. Quelle est la meilleure façon de stocker cela dans une base de données? Je vois trois possibilités:
- Utilisez une colonne SET DATATYPE, plus une seule colonne VARCHAR "autre" autre_Contact "pour stocker la valeur en option intentée par l'utilisateur.
- Utilisez plusieurs à plusieurs et une colonne entre l'utilisateur. Il y aurait donc une table d'utilisateurs, une table Contact_Method et une table user_contact_method qui relie les deux. Plus une colonne User.other_Contact VARCHAR pour stocker la valeur en option intentée par l'utilisateur.
- Utilisez simplement plusieurs à plusieurs. Même configuration que 2 mais laissez les utilisateurs ajouter des entrées à la table Contact_Method. Mais cela signifie que je devrai ajouter une colonne pour garder une trace des valeurs "système" (celles-ci ne peuvent pas être modifiées ou supprimées par les utilisateurs, et seules celles-ci apparaissent dans une liste déroulante). De plus, je vais devoir ajouter une logique supplémentaire pour permettre à leur valeur intentée par l'utilisateur de modifier.
Des commentaires sur ce qui précède, ou y a-t-il une meilleure solution?
La solution
Si vous avez un utilisateur et plusieurs possibilités de méthode de contact, c'est très probablement une relation un-à-plusieurs. (J'éviterais plusieurs à plusieurs là où vous le pouvez, en raison de la complexité supplémentaire et du ralentissement de l'interrogation de tels modèles.)
users_table
id INTEGER
name VARCHAR
etc.
contacts_table
user_id INTEGER -- foreign key on user.id
contact_method ENUM('email', 'phone', 'mail', 'other')
contact_address VARCHAR
etc.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow