Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 9362|Respuesta: 0

[Fuente] Regla de hierro de la base de datos MySQL

[Copiar enlace]
Publicado en 10/10/2019 14:00:44 | | |
Una buena especificación de base de datos ayuda a reducir la complejidad de la implementación del software y a disminuir los costes de comunicación.

1. La ley de hierro de la construcción de un almacén

-
Ley de hierro
Nivel
comentario
Conjunto de caracteres
Usa UTF-8. Si el emoji está almacenado, usa utf8mb4 para almacenamiento.
forzado

Reglas de clasificación
Usa utf8_general_ci
forzado

2. La ley de hierro de la construcción de la mesa

-
Ley de hierro
Nivel
comentario
exégesis
Asegúrate de incluir anotaciones de campo.
forzado

codificar
Usa UTF-8. Si el emoji está almacenado, usa utf8mb4 para almacenamiento.
forzado

si el campo es conceptual
Debe nombrarse con is_xx, y el tipo de dato es unsigned tinyint (1 sí, 0 no), por ejemplo is_deleted(1 eliminar, 0 no eliminado).
forzado
Cualquier campo debe ser sin signo si no es negativo
Nombre de la tabla, nombre del campo
Solo se pueden usar letras minúsculas, guiones bajos o números; Está prohibido comenzar con un subrayado o un número; Solo están prohibidos los números entre dos guiones de fondo; Desactivar las palabras reservadas; El uso de sustantivos plurales está prohibido en los nombres de las tablas.
forzado

La denominación del nombre de la base de datos y del nombre de la tabla
El nombre de la base de datos debe ser consistente con el nombre de la aplicación, y el nombre de la tabla debe estar con Name_Role de negocio de la tabla.
forzado

Denominación de índices
El índice de clave primaria utiliza pk_ nombre de campo; Índice único con uk_ nombre de campo; Los índices normales utilizan nombres de idx_ campo.
forzado
pk_ es la clave primaria; uk_ es una tonalidad única; idx_ es índice
Tipo decimal
El tipo de dato es decimal, y está prohibido el uso de float y double; float y double tienen pérdida de precisión, y si el rango de datos almacenados supera el rango decimal, se recomienda dividir los datos en enteros y decimales y almacenarlos por separado.
forzado

Tipo Varchar
Varchar es una cadena variable larga, no se asigna espacio de almacenamiento de antemano, la longitud no debe superar los 5000 caracteres; si la longitud es mayor a 5000, aplica texto (crea una tabla separada, usa la clave primaria para corresponder, para evitar afectar la eficiencia de indexación de otros campos).
forzado

Debe haber tres campos en el nombre de la tabla
id (el tipo de dato es bigint sin signo, incremento de tabla única, tamaño de paso es 1), gmt_create, gmt_modified (tiempo de creación activa, tiempo de actualización pasiva, tipo de dato es datatime).
forzado

Redundancia de campos
Los campos permiten la redundancia adecuada, pero debe considerarse la consistencia de los datos, y los campos redundantes deben tener 1) modificaciones poco frecuentes; 2) No un campo varchar súper largo, y mucho menos un campo de texto.
Recomendar

Divide la base de datos y las tablas
La partición solo se recomienda cuando el número de filas de una sola tabla supera los 5 millones de filas o la capacidad de una tabla supera los 2 GB.
Recomendar


Establecer la longitud adecuada de almacenamiento de caracteres no solo ahorra espacio en tablas de base de datos e índice, sino que, más importante aún, mejora la velocidad de recuperación.

3. Establecer una ley de hierro índice

-
Ley de hierro
Nivel
comentario
Índice único
Los campos con características únicas en el negocio, incluso si son una combinación de campos, deben estar indexados de forma única. Aunque el índice único afecta a la velocidad de inserción, esta pérdida es insignificante, pero mejora significativamente la velocidad de consulta. Además, incluso si la capa de aplicación tiene un control de comprobación muy completo, siempre que no exista un índice único, según la Ley de Murphy, inevitablemente se generarán datos sucios.
forzado

Únete
Más de tres tablas prohíben la unión, campos que requieren unión, y los tipos de datos deben ser consistentes; Cuando se asocian varias tablas a consultas, asegúrate de que los campos asociados tengan un índice. Aunque tengas una doble unión de tablas, presta atención a la indexación de tablas y al rendimiento de SQL.
forzado

Varcharfield
La longitud del índice debe especificarse, y no es necesario indexar todos los campos, solo determinar la longitud del índice según la distinción real del texto. La longitud y distinción del índice son un par de contradicciones; generalmente para los datos de tipo de cadena, los índices con una longitud de 20 tendrán un grado de distinción superior al 90%, que puede determinarse por el grado de distinción de count(distinct left(nombre de columna, longitud del índice))/count(*).
forzado

El desenfoque está prohibido en la búsqueda de páginas
La búsqueda de página prohíbe el desenfoque o el desenfoque completo; si es necesario, por favor accede al motor de búsqueda para solucionarlo. Razón de prohibición: El archivo índice tiene la propiedad de coincidencia de prefijo más a la izquierda del B-Tree, y si no se determina el valor de la izquierda, entonces este índice no puede usarse.
forzado

Ordenar por
Si hay un escenario ordenado por escenario, presta atención al orden del índice. El último campo de orden por forma forma parte del índice combinado y se coloca al final del orden de combinación del índice para evitar file_sort y afectar al rendimiento de las consultas. Ejemplo: ¿dónde a=? ¿y b=? orden por c; El índice debe construirse como a_b_c; Contraejemplo: Si hay una consulta de rango en el índice, entonces no se puede utilizar el orden del índice, como donde a>10 ordena por b; El índice a_b no se puede ordenar.
Recomendar

4. Escribir reglas de hierro SQL

-
Ley de hierro
Nivel
comentario
contar(*)
No uses count(nombre de columna) o count(constant) en lugar de count(*), que es la sintaxis para el recuento estándar de filas definido por SQL92, independiente de la base de datos, e independiente de NULL y non-NULL. count(*) cuenta filas con valor NULL, mientras que count(nombre de columna) no cuenta filas con esta columna NULL.
forzado

Conde (col distinto)
Cuenta el número de filas únicas en la columna excepto NULL. Obsé que count(distinct col1, col2), si una de las columnas es toda NULL, entonces devuelve 0 aunque la otra columna tenga un valor diferente.
forzado

Sum(col)
Cuando los valores de una columna son todos NULL, count(col) devuelve 0, pero sum(col) devuelve NULL, por lo que debes estar atento a los problemas de NPE al usar sum(). Los problemas NPE pueden evitarse de las siguientes maneras: seleccionar if(isnull(sum(g)), 0, sum(g)) de la tabla;
forzado

isnull
Usa isnull() para determinar si es un valor NULL. NULL es NULL comparado con cualquier valor.
forzado

Lógica de consulta de paginación
Si el recuento es 0, debe devolverse directamente para evitar ejecutar la siguiente instrucción de paginación.
forzado

Teclas exteriores y cascadas
Está prohibido el uso de claves foráneas y la cascada, y todos los conceptos de clave externa deben resolverse en la capa de aplicación. Motivo: Las claves externas y las cascadas no son adecuadas para clústeres distribuidos de alta concurrencia, las actualizaciones en cascada son fuertes bloqueos, existe el riesgo de tormentas de actualizaciones de bases de datos y las claves foráneas afectan la velocidad de inserción de la base de datos.
forzado

Procedimientos almacenados
Los procedimientos almacenados están prohibidos, y los procedimientos almacenados son difíciles de depurar y escalar, y no son portátiles.
forzado

Corrección de datos
Al corregir datos (especialmente al eliminar o modificar registros), selecciona primero para evitar la eliminación accidental y solo ejecuta la instrucción update después de confirmar que es correcta.
forzado

en
Si no se puede evitar, el número de elementos del conjunto después de dentro debería controlarse dentro de 1000.
Recomendar

Tabla truncada
Está prohibido usar la tabla truncada, que es más rápida que eliminar y consume menos recursos del sistema y del registro, pero truncada es libre de transacciones y no activa disparadores, lo que puede causar accidentes, por lo que no se utilice esta instrucción en el código de desarrollo.
referencia


5. ORM mapea leyes de hierro

-
Ley de hierro
Nivel
comentario
Consulta de tabla
La lista de campos que están prohibidos de usar * para consultas debe ser clara sobre cuáles campos son necesarios.
forzado

POJO
El atributo booleano de la clase POJO no puede añadirse a is, mientras que el campo de base de datos debe añadirse a is, requiriendo mapeo entre campos y atributos en el resultMap.
forzado

Parámetros de retorno
Está prohibido usar resultClass como parámetro de retorno, incluso si todos los nombres de atributos de clase corresponden uno a campos de base de datos uno por uno, deben definirse; A su vez, cada tabla debe tener un atributo correspondiente. Motivo: Configura la relación de mapeo para acoplar el campo con la clase DO y facilitar el mantenimiento.
forzado

Parámetros de retorno
Está prohibido usar directamente HashMap y HashTable como salida del conjunto de resultados de la consulta. Razón: El tipo de valor del atributo es incontrolable.
forzado

sql.xml Configurar parámetros
sql.xml Utiliza #{}, #param# para los parámetros de configuración, y no uses ${}, ya que ${} es propenso a la inyección SQL.
forzado

queryForList
Está prohibido el uso de queryForList (String statementName, int start, int size) que viene con Mybatis. Razón: Se implementa recuperando todos los registros de la sentencia SQL correspondiente a la sentencia Nombre, y luego usando la subLista para obtener un subconjunto de inicio y tamaño.
forzado

Hora de actualización
Al actualizar un registro de tabla de base de datos, debes actualizar el tiempo de modificación del registro al mismo tiempo.
forzado

Actualizar los registros de tablas de la base de datos
No escribas una interfaz de actualización de datos grande y completa (pasada como una clase POJO). Al ejecutar SQL, no actualice los campos sin cambios debido a la propensión, ineficiencia y almacenamiento en binlogs más alto.
Recomendar

@Transactional
@Transactional No abuses de las transacciones. Las transacciones afectan al QPS de la base de datos. Además, cuando usas transacciones, debes considerar varios aspectos de los esquemas de retroceso, incluyendo el rollback de caché, el rollback de motores de búsqueda, la compensación de mensajes, la corrección estadística, etc.
referencia

Etiquetas SQL dinámicas de Mybatis
< compareValue en isEqual> es una constante comparada con el valor del atributo, normalmente un número, que indica que la sentencia SQL correspondiente se ejecuta cuando es igual; < isNotEmpty> indica que se ejecuta cuando no está vacío ni nulo; < isNotNull> indica que se ejecuta cuando no es nulo.
referencia








Anterior:El mapa de operaciones SEO es el primero de toda la red, una colección de mapas de operaciones en alta definición ultracompletos de Internet
Próximo:[Ciencias de la Tierra] Enciclopedia Infantil DK Una enciclopedia de alta calidad del Reino Unido...
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com