J'ai une base de données existante qui est structuré comme suit:Database Design - une table ou plusieurs tables/joint
user
user_profile
user_permissions
user_statistics
Chaque table a une colonne unique qui est utilisé pour joindre chaque table ensemble, comme suit:
SELECT *
FROM user
INNER JOIN user_profile ON user.user_id = user_profile.user_profile_id
INNER JOIN user_permissions ON user.user_id = user_permissions.user_permissions_id
INNER JOIN user_statistics ON user.user_id = user_statistics.user_statistics_id
WHERE user_id = 1
Y a-t-il quelque chose qui ne va pas dans ce cas ou est-il préférable de créer une table avec beaucoup de colonnes, de sorte qu'aucune jointure ne soit nécessaire?
OK, donc en termes de meilleures pratiques, la seule fois où je besoin de partager mes données lorsque j'ai un seul enregistrement d'utilisateur dans "utilisateur" et plusieurs enregistrements qui se rapportent à l'enregistrement de l'utilisateur dans les autres tableaux comme les statistiques et les autorisations? L'utilisation de jointures ralentit-elle la requête de la base de données? – Reado
Il * peut * l'accélérer; Cela dépend de la nature des données que vous stockez. –
Les jointures vous ralentiront si vous n'indexez pas correctement. Le FK devrait avoir un index et toutes les bases de données ne le donneront pas automatiquement dans le cadre de la création du FK. Vous pouvez avoir besoin de relations en tête-à-tête si vous avez des champs qui seront rarement remplis (ou requêtes) ou des tables très larges. Des tables très larges peuvent entraîner des performances lentes ou une incapacité à ajouter les informations dont vous avez besoin en raison des contraintes de taille d'enregistrement. – HLGEM