Comment évitez-vous le nom de colonne de conflits?

J'ai récemment été affecté à une tâche de création d'un système d'enchères. Au cours de mon travail, j'ai rencontré de nombreuses occasions où mes requêtes SQL contenues rejoint échec de l'exécution en raison d'ambigu des noms de colonne. Considérez ceci (simplifié) structure de la table pour la vente aux enchères:

table auction:

  • id
  • name
  • uid (ID de l'utilisateur qui a créé la vente aux enchères)

table item:

  • id
  • name
  • uid (ID de l'utilisateur qui a ajouté à l'élément)
  • aid (ID de la vente aux enchères où l'article est disponible)
  • price (prix initial)

table user:

  • id
  • name

table bid:

  • id
  • uid (ID de l'utilisateur qui a placé une enchère)
  • iid (article dont le prix a été revu à la hausse)
  • price (prix offert)

Comme vous pouvez le voir, il existe de nombreuses colonnes qui ont des noms en conflit. L'adhésion à ces tables nécessite l'utilisation de certains des mesures qui permettront d'effacer les ambiguïtés.

Je pense à deux façons de le faire. La première est de renommer les colonnes, en préfixant le tout avec une présentation abrégée de nom de table, ainsi que l'IDENTIFIANT de l'enchère va devenir a_id, l'ID de l'élément deviendra i_id, et l'ID de l'élément à l'intérieur de la bid table deviendra b_i_id. C'est assez solide, mais réduit la lisibilité des noms de colonne.

Un autre moyen que je peux penser à est de l'écriture explicite des requêtes:

SELECT `bid`.`id`, `user`.`name`, `bid`.`price`
FROM `bid`
JOIN `item` ON `item`.`id` = `bid`.`iid`
JOIN `user` ON `user`.`id` = `bid`.`uid`
JOIN `auction` ON `auction`.`id` = `item`.`aid`
WHERE `bid`.`price` > `item`.`price`
AND `auction`.`id` = 1
GROUP BY `user`.`id`
ORDER BY `bid`.`price` DESC;

C'est lisible et non équivoque, mais nécessite beaucoup plus de touches.

- Je utiliser la deuxième méthode, mais peut-être qu'il en existe d'autres que vous avez utilisé avec succès dans des situations similaires? Comment évitez-vous le nom de colonne de conflits dans vos requêtes SQL?

Si keystrokes sont un sujet de préoccupation quand vous programme, vous devez reconsidérer votre cheminement de carrière!
OK, tu m'as eu avec celui-ci, cette remarque mérite un +1 🙂
Déposer les backticks `, ils n'ont rien à voir avec SQL (vérifier les normes en vigueur!) et d'enregistrer des séquences de touches.
Ce n'est pas seulement keystrokes; il permet d'avoir une vue rigide. Il peut facilement créer le silence des problèmes où une colonne est ajoutée à une table, mais l'affichage n'est pas mis à jour. Je sais que théorie tout le monde devrait le type de tous les champs de tous les temps, mais souvent, les gens utilisent des programmes mapper automatiquement les colonnes pour eux, par exemple, PowerBI, EntityFramework, etc.

OriginalL'auteur mingos | 2011-02-23