Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL insère automatiquement une ligne dans table2 lors d'une insertion dans table1

Vous auriez besoin de déclencheurs pour insérer "automatiquement" l'enregistrement dans une table séparée.

L'insertion de l'enregistrement dans UserPrivacy avec une requête distincte serait le moyen le plus courant d'implémenter cela.

S'il s'agit d'une relation un-à-un, le placer dans la même table permet des requêtes plus simples (aucune jointure requise).

Des décisions, des décisions...

Avec une relation un à (zéro à un), il y a plus de facteurs à prendre en compte.

Si la table UserPrivacy est volumineuse, il peut être judicieux de la placer dans une table séparée pour économiser de l'espace. Cela serait également plus normalisé.

Si vous demandiez souvent quelque chose comme "Donnez-moi tous les utilisateurs qui n'ont pas de données de confidentialité", il peut être judicieux de le mettre dans un tableau séparé. Étant donné que les index n'incluent pas de valeurs NULL (par défaut), il serait plus rapide de faire un JOIN à une table séparée. Bien sûr, la solution consiste à utiliser une valeur autre que NULL pour représenter "pas de paramètres de confidentialité", mais une faible cardinalité affecte également négativement les performances. Des tables séparées seraient préférables dans ce cas.

En outre, si les données de confidentialité étaient mises à jour fréquemment, mais pas les données utilisateur, des tables séparées empêcheraient les verrous de ligne sur la table utilisateur, et les mises à jour sont plus rapides sur des tables plus petites, ce qui peut améliorer les performances.

Si vous avez souvent besoin des données UserPrivacy sans UserData, ou vice versa, vous pouvez les séparer.

Pourtant, cela pourrait être une optimisation prématurée. Vous voudrez peut-être simplement les séparer s'ils correspondent mieux à vos modèles. Tenez compte de la simplicité de le conserver dans le même tableau par rapport aux problèmes de performances, de taille et de lisibilité.

Si la relation était un à (zéro à plusieurs), vous voudriez évidemment une table séparée, mais pour un à (zéro à un), c'est facultatif.

Enfin...

N'ayez pas peur de les séparer, tant qu'il y a une raison.