técnicos - Preguntas que cualquier buen desarrollador de base de datos/SQL debería poder responder
sql para principiantes (22)
Estaba repasando Cuestiones que todo buen desarrollador de .Net debería poder responder y estaba muy impresionado con el contenido y el enfoque de esta pregunta y, por lo tanto, con el mismo espíritu, hago esta pregunta para el Desarrollador de bases de datos / SQL.
¿A qué preguntas cree que debería responder un buen programador de bases de datos / SQL?
¿Cuál es la diferencia entre un índice agrupado y un índice no agrupado?
Otra pregunta que le pediría que no sea para un servidor específico sería:
¿Qué es un punto muerto?
"¿Por qué cada SELECT siempre debe incluir DISTINCT?"
¿Por qué deberíamos contratarlo cuando tenemos una aplicación sofisticada que utiliza un ORM correctamente optimizado e implementa sistemas de caché como memcached ?
Esta es una pregunta seria, deberían poder justificar su existencia. Como a Jeff Atwood le gusta decir "El hardware es barato, los programadores son caros "
¿Qué es la inyección sql y cómo la previene?
¿Qué es un cursor y cuándo lo usarías (o no) y por qué?
Aquí hay algunos:
- ¿Qué es la normalización y por qué es importante?
- ¿Cuáles son algunas situaciones en las que podría desnormalizar los datos?
- ¿Qué es una transacción y por qué es importante?
- ¿Qué es la integridad referencial y por qué es importante?
- ¿Qué pasos tomaría para investigar los informes de rendimiento lento de la base de datos?
Casi todo se menciona aquí. Me gustaría compartir una pregunta que me hizo un gerente sénior en la base de datos. Encontré la pregunta bastante interesante y si lo piensas profundamente, tiene bastante significado.
La pregunta era: ¿Cómo describirías la base de datos a tu hijo de 5 años?
Compare y contraste las diferencias entre una solución sql / rdbms y una solución nosql. No puede pretender ser un experto en ninguna tecnología sin conocer sus fortalezas y debilidades en comparación con sus competidores.
Dé un ejemplo donde la denomralización es preferible.
(Me gusta esta porque la gente viene arrasando de la universidad buscando poner todo en 3ra forma normal)
Daría una consulta mal escrita y les preguntaría cómo mejorarían el rendimiento.
Preguntaría sobre la teoría de conjuntos. Si no comprende el funcionamiento en conjuntos, no puede consultar con eficacia una base de datos relacional.
Les daría algunos ejemplos de cursor y les preguntaría cómo los reescribirían para hacerlos basados en conjuntos.
Si el trabajo implicaba importaciones y exportaciones, haría preguntas sobre SSIS (u otras herramientas involucradas en hacer esto usadas por otras bases de datos). Si se trata de escribir informes, me gustaría saber que entienden los agregados y la agrupación (además de Crystal Reports o SSRS o la herramienta de montaje que utilice).
Preguntaría la diferencia de resultados entre estas tres consultas:
select a.field1
, a.field2
, b.field3
from table1 a
join table2 b
on a.id = b.id
where a.field5 = ''test''
and b.field3 = 1
select a.field1
, a.field2
, b.field3
from table1 a
left join table2 b
on a.id = b.id
where a.field5 = ''test''
and b.field3 = 1
select a.field1
, a.field2
, b.field3
from table1 a
left join table2 b
on a.id = b.id and b.field3 = 1
where a.field5 = ''test''
En nuestra compañía, en lugar de hacer muchas preguntas SQL que cualquier persona con buena memoria puede responder, creamos una prueba de SQL para desarrolladores. La prueba está diseñada para que el candidato prepare un esquema sólido con normalización y consideraciones de RI, verifique las restricciones, etc. Y luego, puede crear algunas consultas para producir conjuntos de resultados que estamos buscando. Crean todo esto frente a una breve especificación de diseño que les damos. Se les permite hacer esto en casa y tomar todo el tiempo que necesiten (dentro de lo razonable).
He colocado esta respuesta porque Erwin Smout publicó una answer que estaba tan equivocada que resaltó que probablemente haya una necesidad de protegerla específicamente.
Erwin sugirió:
"¿Por qué cada SELECT siempre debe incluir DISTINCT?"
Una pregunta más adecuada sería: si alguien hiciera la afirmación de que: "cada SELECT siempre incluye DISTINCT"; ¿Cómo comentarías sobre el reclamo?
Si un candidato no puede derribar el reclamo en llamas, ellos:
- No entiendo el problema con el reclamo.
- Falta de habilidades de pensamiento crítico.
- La falta de capacidad para comunicar problemas técnicos.
Para el registro
- Supongamos que su consulta es correcta y no devuelve ningún duplicado, por lo que incluir DISTINCT simplemente obliga al RDBMS a verificar su resultado (cero beneficios y mucho procesamiento adicional).
- Supongamos que su consulta es incorrecta y devuelve duplicados, y luego incluir DISTINCT simplemente oculta el problema (nuevamente con procesamiento adicional). Sería mejor detectar el problema y arreglar su consulta ... se ejecutará más rápido de esa manera.
La aplicación está en uso las 24 horas del día. Su ventana de mantenimiento / actualización es de 2 horas cada mes, ¿cómo planea minimizar la interrupción?
Los diferentes tipos de JOINs:
- UNIR INTERNAMENTE
- UNIÓN EXTERIOR IZQUIERDA Y DERECHA
- FULL JOIN
- CROSS JOIN
Ver la explicación visual de JOINs de Jeff Atwood
- ¿Qué es una llave? ¿Una clave candidata? Una clave principal? Una tecla alternativa? Una clave extranjera?
¿Qué es un índice y cómo ayuda a su base de datos?
¿Cuáles son los tipos de datos disponibles y cuándo usar cuáles?
Qué explain plan
y cómo interpreta los resultados que obtiene de él.
Saber no usar y POR QUÉ no usar:
SELECT *
Una pregunta interesante implicaría la división relacional , o cómo expresar una relación "para todos", que requeriría cláusulas anidadas que not exists
.
La pregunta viene directamente desde este enlace .
Dadas las siguientes tablas, representando pilotos que pueden volar aviones y aviones en un hangar:
create table PilotSkills (
pilot_name char(15) not null,
plane_name char(15) not null
)
create table Hangar (
plane_name char(15) not null
)
Seleccione los nombres de los pilotos que pueden volar cada avión en el hangar.
La respuesta:
select distinct pilot_name
from PilotSkills as ps1
where not exists (
select * from hangar
where not exists (
select * from PilotSkills as ps2 where
ps1.pilot_name = ps2.pilot_name and
ps2.plane_name = hangar.plane_name
)
)
O ...
Seleccione todos los usuarios de desbordamiento de pila que hayan aceptado respuestas en preguntas etiquetadas con los 10 lenguajes de programación más populares .
La respuesta (posible) (suponiendo una vista Accepted_Answers
y una tabla Target_Language_Tags
con las etiquetas deseadas):
select distinct u.user_name
from Users as u
join Accepted_Answers as a1 on u.user_id = a1.user_id
where not exists (
select * from Target_Language_Tags t
where not exists (
select *
from Accepted_Answers as a2
join Questions as q on a2.question_id = q.question_id
join Question_Tags as qt on qt.question_id = q.question_id
where
qt.tag_name = t.tag_name and
a1.user_id = a2.user_id
)
)
Una reimpresión de mi respuesta aquí , como pautas generales para los temas.
Lo esencial
-
SELECT
columnas de una tabla - Agregados Parte 1:
COUNT
,SUM
,MAX
/MIN
- Agregados Parte 2:
DISTINCT
,GROUP BY
,HAVING
Intermedio
-
JOIN
s, sintaxis ANSI-89 y ANSI-92 -
UNION
vsUNION ALL
- Manejo
NULL
:COALESCE
y manejo Native NULL - Subconsultas:
IN
,EXISTS
y vistas en línea - Subconsultas: correlacionadas
-
WITH
sintaxis: factorización de subconsulta / CTE - Puntos de vista
Temas avanzados
- Funciones, procedimientos almacenados, paquetes
- Datos pivotantes: sintaxis CASE & PIVOT
- Consultas jerárquicas
- Cursores: implícito y explícito
- Disparadores
- SQL dinámico
- Vistas Materializadas
- Optimización de consultas: índices
- Optimización de consultas: Explicar planes
- Optimización de consultas: creación de perfiles
- Modelado de datos: formularios normales, 1 a 3
- Modelado de datos: claves primarias y extranjeras
- Modelado de datos: Restricciones de tablas
- Modelado de datos: tablas de enlace / corrolario
- Búsqueda de texto completo
- XML
- Niveles de aislamiento
- Diagramas de relaciones entre entidades (ERD), lógicos y físicos
- Transacciones:
COMMIT
,ROLLBACK
, Manejo de errores
- ¿Cómo se detectan y resuelven los problemas de concurrencia en la capa de aplicación?
- Qué paradigmas de bloqueo suelen estar disponibles, y discutir sus pros y sus contras.
- Discuta valores NULL y problemas relacionados.
- ¿Cuál es el sistema de base de datos más grande en el que ha trabajado en términos de: # tablas, # filas, # usuarios.
También las siguientes preguntas específicas de la plataforma (SQL Server):
- Discuta las columnas de IDENTIDAD.
- ¿Para qué se utiliza el tipo de datos de marca de tiempo?
- ¿Cuáles son las desventajas de usar sentencias de SQL adhoc / on-the-fly y qué harías en su lugar?
Esta área puede tener un gran impacto en el rendimiento y la seguridad de la base de datos. Haga esto mal, y podría terminar en un mundo de dolor.
- ¿En qué situaciones usaría sentencias SQL adhoc / on-the-fly?
Porque siempre hay una excepción a la regla :)
- Explica la diferencia entre una unión interna y externa.
- ¿Qué es un producto cartesiano?
- Explica la tercera forma normal
- Explicar posibles restricciones en las tablas
- Explicar puntos de vista (y materializados)
- Explicar secuencias
- Explicar desencadenantes
¿Qué tipos de bases de datos le causaron, como desarrollador, más problemas para comprender y depurar? Respuesta esperada, en mi humilde opinión, experiencia con problemas utilizando diferentes tipos de fecha / hora y BLOB .
¿Cuándo es conveniente usar índices de mapa de bits?