Je sais que c'est tard dans le jeu, et la question a déjà été très bien répondu, mais je veux donner mon avis sur # 3 concernant le préfixe des noms de colonne.
Toutes les colonnes doivent être nommées avec un préfixe unique à la table dans laquelle elles sont définies.
Par exemple, étant donné les tableaux "client" et "adresse", allons-y avec les préfixes de "cust" et "addr", respectivement. "client" aurait "cust_id", "cust_name", etc. dedans. "adresse" aurait "addr_id", "addr_cust_id" (FK retour au client), "addr_street", etc. dedans.
Lorsque j'ai été présenté pour la première fois avec cette norme, j'étais complètement opposé à cela; Je détestais l'idée. Je ne pouvais pas supporter l'idée de toute cette frappe et redondance supplémentaires. Maintenant, j'ai assez d'expérience avec ça pour ne plus jamais y retourner.
Le résultat de cette opération est que toutes les colonnes de votre schéma de base de données sont uniques. Il y a un avantage majeur à cela, qui l'emporte sur tous les arguments contre (à mon avis, bien sûr):
Vous pouvez rechercher l'ensemble de votre base de code et trouver de manière fiable chaque ligne de code qui touche une colonne particulière.
L'avantage du n ° 1 est incroyablement énorme. Je peux déprécier une colonne et savoir exactement quels fichiers doivent être mis à jour avant que la colonne puisse être supprimée du schéma en toute sécurité. Je peux changer la signification d'une colonne et savoir exactement quel code doit être refactorisé. Ou je peux simplement dire si les données d'une colonne sont même utilisées dans une partie particulière du système. Je ne peux pas compter le nombre de fois où cela a transformé un projet potentiellement énorme en un projet simple, ni le nombre d'heures que nous avons économisées dans le travail de développement.
Un autre avantage relativement mineur est que vous ne devez utiliser des alias de table que lorsque vous effectuez une auto-jointure:
SELECT cust_id, cust_name, addr_street, addr_city, addr_state
FROM customer
INNER JOIN address ON addr_cust_id = cust_id
WHERE cust_name LIKE 'J%';