Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 9362|Répondre: 0

[Source] Règle de base de données MySQL

[Copié le lien]
Publié sur 10/10/2019 14:00:44 | | |
Une bonne spécification de base de données aide à réduire la complexité de la mise en œuvre logicielle et à diminuer les coûts de communication.

1. La loi de fer de la construction d’un entrepôt

-
Loi de fer
Niveau
remarque
Jeu de caractères
Utilise l’UTF-8. Si l’emoji est stocké, utilisez utf8mb4 pour le stockage.
forcée

Règles de tri
Utilisez utf8_general_ci
forcée

2. La loi de fer de la construction de tables

-
Loi de fer
Niveau
remarque
exégèse
Assurez-vous d’avoir des annotations sur le terrain.
forcée

encoder
Utilise l’UTF-8. Si l’emoji est stocké, utilisez utf8mb4 pour le stockage.
forcée

si le champ est conceptuel
Il doit être nommé par is_xx, et le type de données est unsigned tinyint (1 oui, 0 non), par exemple is_deleted(1 supprimé, 0 non supprimé).
forcée
Tout champ doit être sans signe s’il n’est pas négatif
Nom du tableau, nom du champ
Seules les lettres minuscules, les sous-points ou les chiffres peuvent être utilisés ; Il est interdit de commencer par un soulignement ou un chiffre ; Seuls les numéros sont interdits entre deux underlines ; Désactiver les mots réservés ; L’utilisation de noms pluriels est interdite dans les noms des tableaux.
forcée

La dénomination du nom de la base de données et du nom de la table
Le nom de la base de données doit être cohérent avec le nom de l’application, et le nom de la table doit être nommé avec Name_Role Business de la table.
forcée

Dénomination des indices
L’index principal utilise pk_ nom de champ ; Index unique avec uk_ nom de champ ; Les index normaux utilisent idx_ noms de champs.
forcée
pk_ est la clé primaire ; uk_ est une tonalité unique ; idx_ est l’index
Type décimal
Le type de données est décimal, et l’utilisation de float et double est interdite, float et double subissent une perte de précision, et si la plage de données stockées dépasse celle de décimal, il est recommandé de diviser les données en entiers et décimaux et de les stocker séparément.
forcée

Type Varchar
varchar est une chaîne variable longue, aucun espace de stockage n’est alloué à l’avance, la longueur ne doit pas dépasser 5000 caractères, si la longueur est supérieure à 5000, appliquer du texte (créer un tableau séparé, utiliser la clé primaire pour correspondre, afin d’éviter d’affecter l’efficacité d’indexation des autres champs).
forcée

Il doit y avoir trois champs dans le nom du tableau
ID (le type de données est bigint non signé, incrément de table unique, taille de pas 1), gmt_create, gmt_modified (temps de création active, temps de mise à jour passive, type de données est datetime).
forcée

Redondance de champ
Les champs permettent une redondance appropriée, mais la cohérence des données doit être prise en compte, et les champs redondants doivent avoir 1) des modifications peu fréquentes ; 2) Pas un champ très long de Varchar, encore moins un champ de texte.
Recommander

Divisez la base de données et les tables
Le partitionnement n’est recommandé que lorsque le nombre de lignes dans une seule table dépasse 5 millions de lignes ou que la capacité d’une seule table dépasse 2 Go.
Recommander


Définir la longueur de stockage appropriée des caractères permet non seulement d’économiser de l’espace dans les tables de base de données et de l’index, mais surtout, d’améliorer la vitesse de récupération.

3. Établir une loi de fer indiciel

-
Loi de fer
Niveau
remarque
Indice unique
Les domaines ayant des caractéristiques uniques dans l’entreprise, même s’ils sont une combinaison de champs, doivent être indexés de manière unique. Bien que l’indice unique affecte la vitesse d’insertion, cette perte est négligeable, mais elle améliore significativement la vitesse de requête. De plus, même si la couche application dispose d’un contrôle de contrôle très complet, tant qu’il n’y a pas d’indice unique, selon la loi de Murphy, des données compromettantes seront inévitablement générées.
forcée

Rejoins
Plus de trois tables interdisent la jointure, les champs nécessitant la jointure, et les types de données doivent être cohérents ; Lorsque plusieurs tables sont associées aux requêtes, assurez-vous que les champs associés doivent comporter un index. Même si vous avez une double jointure de table, faites attention à l’indexation des tables, aux performances SQL.
forcée

Varcharfield
La longueur de l’index doit être spécifiée, et il n’est pas nécessaire d’indexer tous les champs, il suffit de déterminer la longueur de l’index selon la distinction réelle du texte. La longueur et la distinction de l’indice sont une paire de contradictions ; généralement, pour les données de type de chaîne, les indices de longueur 20 auront un degré de distinction supérieur à 90 %, déterminé par le degré de distinction de count(distinct left(nom de colonne, longueur d’index)))/count(*).
forcée

Le flou est interdit lors de la recherche de pages
La recherche de page interdit le floutage ou le floutage complet ; si nécessaire, veuillez consulter le moteur de recherche pour résoudre le problème. Raison d’interdiction : Le fichier index possède la propriété de correspondance du préfixe le plus à gauche de l’arbre B, et si la valeur à gauche n’est pas déterminée, alors cet index ne peut pas être utilisé.
forcée

Ordre par
S’il existe un ordre par scénario, faites attention à l’ordre de l’index. Le dernier champ d’ordre par fait partie de l’index combiné et est placé à la fin de l’ordre de combinaison de l’indice afin d’éviter file_sort et d’affecter la performance des requêtes. Exemple : où a= ? et b= ? ordre par c ; L’indice doit être construit comme a_b_c ; Contre-exemple : s’il y a une recherche de plage dans l’index, alors l’ordre de l’indice ne peut pas être utilisé, comme lorsque a>10 ordre par b ; L’index a_b ne peut pas être trié.
Recommander

4. Écrire des règles SQL

-
Loi de fer
Niveau
remarque
count(*)
N’utilisez pas count(nom de colonne) ou count(constant) au lieu de count(*), qui est la syntaxe du compte standard de lignes défini par SQL92, indépendante de la base de données, et indépendante de NULL et non-NULL. count(*) compte les lignes avec une valeur NULL, tandis que count(nom de colonne) ne compte pas les lignes avec cette colonne NULL.
forcée

Comte (col distinct)
Compte le nombre de lignes uniques dans la colonne sauf NULL. Notez que compter (distinct col1, col2), si l’une des colonnes est entièrement NULL, alors elle retourne 0 même si l’autre colonne a une valeur différente.
forcée

Sum(col)
Lorsque les valeurs d’une colonne sont toutes NULL, count(col) retourne 0, mais sum(col) retourne NULL, donc il faut être conscient des problèmes NPE lorsque vous utilisez sum(). Les problèmes NPE peuvent être évités des manières suivantes : sélectionner if(isnull(sum(g)), 0, sum(g)) à partir du tableau ;
forcée

isnull
Utilisez isnull() pour déterminer s’il s’agit d’une valeur NUL. NULL est NULL comparé à n’importe quelle valeur.
forcée

Logique de requête par pagination
Si le compte est à 0, il doit être retourné directement pour éviter d’exécuter l’instruction de pagination suivante.
forcée

Tonalités extérieures et cascades
L’utilisation de clés étrangères et de cascade est interdite, et tous les concepts de clés étrangères doivent être résolus au niveau applicatif. Raison : Les clés étrangères et les cascades ne conviennent pas aux clusters distribués à forte concurrence, les mises à jour en cascade bloquent fortement, il existe un risque de tempêtes de mises à jour de la base de données, et les clés étrangères affectent la vitesse d’insertion de la base de données.
forcée

Procédures stockées
Les procédures stockées sont interdites, et les procédures stockées sont difficiles à déboguer et à mettre en échelle, et ne sont pas portables.
forcée

Correction des données
Lors de la correction de données (notamment lors de la suppression ou de la modification des enregistrements), sélectionnez d’abord pour éviter la suppression accidentelle, et n’exécutez l’instruction update qu’après avoir confirmé qu’elle est correcte.
forcée

dans
Si cela ne peut pas être évité, le nombre d’éléments de l’ensemble après dans devrait être contrôlé avec un minimum de 1000.
Recommander

Tableau tronqué
Il est interdit d’utiliser la table tronquée, qui est plus rapide que la suppression et utilise moins de ressources système et journalistes, mais tronque est sans transaction et ne déclenche pas de déclencheurs, ce qui peut causer des accidents, donc ne pas utiliser cette instruction dans le code de développement.
référence


5. L’ORM cartographie les lois de fer

-
Loi de fer
Niveau
remarque
Requête de table
La liste des champs interdits d’utilisation de * pour les requêtes doit être claire sur les champs requis.
forcée

POJO
L’attribut booléen de la classe POJO ne peut pas être ajouté à is, tandis que le champ de base de données doit être ajouté à is, nécessitant une correspondance entre champs et attributs dans le résultMap.
forcée

Paramètres de retour
Il est interdit d’utiliser resultClass comme paramètre de retour, même si tous les noms d’attributs de classe correspondent un par un aux champs de la base de données, ils doivent être définis ; À son tour, chaque table doit avoir un attribut qui lui correspond. Raison : Configurez la relation de cartographie pour coupler le champ avec la classe DO afin d’assurer une maintenance facile.
forcée

Paramètres de retour
Il est interdit d’utiliser directement HashMap et HashTable comme sortie de l’ensemble de résultats de requêtes. Raison : Le type de valeur d’attribut est incontrôlable.
forcée

sql.xml Paramètres de configuration
sql.xml Utilisez #{}, #param# pour les paramètres de configuration, et n’utilisez pas ${}, car ${} est sujet à l’injection SQL.
forcée

queryForList
L’utilisation de queryForList (String statementName, int start, int size) fournie avec Mybatis est interdite. Raison : Il est implémenté en récupérant tous les enregistrements de l’instruction SQL correspondant à statementName dans la base de données, puis en utilisant le sous-List pour obtenir un sous-ensemble de Start, Size.
forcée

Temps de mise à jour
Lors de la mise à jour d’un enregistrement de table de base de données, vous devez mettre à jour le temps de modification de l’enregistrement en même temps.
forcée

Mise à jour des enregistrements de tables de données
N’écrivez pas une interface de mise à jour de données grande et complète (passée comme une classe POJO). Lors de l’exécution de SQL, ne mettez pas à jour les champs inchangés en raison d’un stockage binlog sujet aux erreurs, inefficace et accru.
Recommander

@Transactional
@Transactional N’abuse pas des transactions. Les transactions affectent le QPS de la base de données. De plus, lorsque vous utilisez des transactions, vous devez prendre en compte divers aspects des schémas de rétroaction, notamment le rollback du cache, le rollback des moteurs de recherche, la compensation des messages, la correction statistique, etc.
référence

Balises SQL dynamiques Mybatis
< compareValue dans isEqual> est une constante comparée à la valeur de l’attribut, généralement un nombre, indiquant que l’instruction SQL correspondante est exécutée lorsqu’elle est égale ; < estNotEmpty> indique qu’il est exécuté lorsqu’il n’est ni vide ni nul ; < isNotNull> indique qu’il est exécuté lorsqu’il n’est pas nul.
référence








Précédent:La carte d’opérations SEO est la première de tout le réseau, une collection de cartes d’opérations Internet haute définition ultra-complètes
Prochain:[Sciences de la Terre] Encyclopédie pour enfants DK Une encyclopédie de haute qualité du Royaume-Uni...
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com