web-dev-qa-db-fra.com

Questions auxquelles tout bon développeur de base de données / SQL devrait pouvoir répondre

Je passais à travers Questions que chaque bon développeur .Net devrait pouvoir répondre et j'ai été très impressionné par le contenu et l'approche de cette question. C'est pourquoi, dans le même esprit, je pose cette question pour Database/SQL. Développeur.

À quelles questions pensez-vous qu'un bon programmeur de bases de données/SQL puisse répondre?

66
Rachel

Les différents types de jointures:

  • JOINTURE INTERNE
  • JOINDRE GAUCHE ET DROITE
  • PLEIN JOIN
  • CROSS JOIN

Voir Jeff Atwood's Explication visuelle des JOINs

  • Qu'est-ce qu'une clé? Une clé de candidat? Une clé primaire? Une clé alternative? Une clé étrangère?
  • Qu'est-ce qu'un index et comment aide-t-il votre base de données?

  • Quels sont les types de données disponibles et quand utiliser lesquels?

31
marc_s

Une réimpression de ma réponse ici , en tant que directives générales pour les sujets.

Les bases


  1. SELECTing colonnes d'une table
  2. Agrégats Partie 1: COUNT, SUM, MAX/MIN
  3. Agrégats Partie 2: DISTINCT, GROUP BY, HAVING

Intermédiaire


  1. JOINs, syntaxe ANSI-89 et ANSI-92
  2. UNION vs UNION ALL
  3. NULL traitement: COALESCE et traitement NULL natif
  4. Sous-requêtes: IN, EXISTS et vues en ligne
  5. Sous-requêtes: corrélées
  6. WITH syntaxe: factorisation des sous-requêtes/CTE
  7. Des vues

Sujets avancés


  • Fonctions, procédures stockées, packages
  • Données pivotantes: syntaxe CASE & PIVOT
  • Requêtes hiérarchiques
  • Curseurs: implicites et explicites
  • Déclencheurs
  • SQL dynamique
  • Vues matérialisées
  • Optimisation de la requête: index
  • Optimisation de la requête: Expliquer les plans
  • Optimisation de la requête: profilage
  • Modélisation des données: formes normales, 1 à 3
  • Modélisation des données: clés primaires et étrangères
  • Modélisation des données: contraintes de table
  • Modélisation des données: tables de liens/corrollary
  • Recherche en texte intégral
  • XML
  • Niveaux d'isolement
  • Diagrammes de relation d'entité (ERD), logique et physique
  • Transactions: COMMIT, ROLLBACK, traitement des erreurs
28
OMG Ponies

Voici quelques-uns:

  • Qu'est-ce que la normalisation et pourquoi est-ce important?
  • Quelles sont certaines situations dans lesquelles vous dé-normaliseriez les données?
  • Qu'est-ce qu'une transaction et pourquoi est-ce important?
  • Qu'est-ce que l'intégrité référentielle et pourquoi est-ce important?
  • Quelles mesures faudrait-il prendre pour examiner les rapports faisant état de performances médiocres de la base de données?
12
Phil Sandler

Qu'est-ce que l'injection SQL et comment l'évitez-vous?

Qu'est-ce qu'un curseur et quand l'utiliseriez-vous (ou pas) et pourquoi?

8
user121301

J'ai placé cette réponse parce qu'Erwin Smout a posté un réponse qui était si faux que cela a mis en évidence le besoin probable de se prémunir contre cela.

Erwin a suggéré:

"Pourquoi chaque SELECT devrait-il toujours inclure DISTINCT?"

Une question plus appropriée serait: Si quelqu'un prétend que: "chaque SELECT inclut toujours DISTINCT"; comment commenteriez-vous la demande?

Si un candidat est incapable de tirer la réclamation en flammes, il doit soit:

  • Je ne comprends pas le problème avec la revendication.
  • Manque d'esprit critique.
  • Manque de capacité à communiquer des problèmes techniques.

Pour l'enregistrement

  1. Supposons que votre requête est correcte, et ne renvoie aucun doublon, puis l'inclusion de DISTINCT oblige simplement le SGBDR à vérifier votre résultat (zéro avantage, et beaucoup de traitement supplémentaire).
  2. Supposons que votre requête est incorrecte, et fait renvoie les doublons, en incluant ensuite DISTINCT simplement cache le problème (encore une fois avec traitement supplémentaire). Il serait préférable de repérer le problème et de résoudre votre requête ... cela ira plus vite de cette façon.
8
Disillusioned

Dans notre entreprise, au lieu de poser beaucoup de questions SQL auxquelles toute personne disposant d'une bonne mémoire peut répondre, nous avons créé un test SQL Developers. Le test est conçu pour que le candidat élabore un schéma solide avec des considérations de normalisation et de RI, vérifie les contraintes, etc. Ils créent tout cela contre une brève spécification de conception que nous leur donnons. Ils sont autorisés à le faire chez eux et prennent tout le temps dont ils ont besoin (dans des limites raisonnables).

5
Randy Minder

Quelle est la différence entre un index clusterisé et un index non clusterisé?

Une autre question que je poserais qui ne concerne pas un serveur spécifique serait:

Qu'est-ce qu'une impasse?

5
Jose Chama

Je voudrais donner une requête mal écrite et leur demander comment ils allaient sur la performance en le réglant.

Je voudrais poser des questions sur la théorie des ensembles. Si vous ne comprenez pas le fonctionnement dans des ensembles, vous ne pouvez pas interroger efficacement une base de données relationnelle.

Je leur donnerais quelques exemples de curseur et leur demanderrais comment les réécrire pour les rendre basés sur des ensembles.

Si le travail impliquait des importations et des exportations, je poserais des questions sur SSIS (ou d'autres outils impliqués dans cette tâche utilisés par d'autres bases de données). Si cela implique la rédaction de rapports, je voudrais savoir qu'ils comprennent les agrégats et les groupes (ainsi que Crystal Reports ou SSRS ou tout autre outil de rapport utilisé).

Je voudrais demander la différence de résultats entre ces trois requêtes:

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'
5
HLGEM

Savoir ne pas utiliser et POURQUOI ne pas utiliser:

SELECT *
4
Jack Marchetti

Une question intéressante impliquerait division relationnelle , ou comment exprimer une relation "pour tous", ce qui nécessiterait un imbriqué not exists _ clauses.

La question vient directement de ce lien .

Étant donné les tableaux suivants, représentant les pilotes pouvant piloter des avions et des avions dans 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
)

Sélectionnez les noms des pilotes qui peuvent piloter tous les avions du hangar.

La réponse:

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
  )
)

Ou ...

Sélectionnez tous les utilisateurs en dépassement de capacité de la pile qui ont accepté les réponses aux questions balisées avec le 10 langages de programmation les plus populaires .

La réponse (possible) (en supposant un Accepted_Answers vue et un Target_Language_Tags table avec les balises désirées):

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
  )
)
3
Jordão

Comparez et contrastez les différences entre une solution sql/rdbms et une solution nosql. Vous ne pouvez pas prétendre être un expert dans une technologie sans connaître ses forces et ses faiblesses par rapport à ses concurrents.

2
Logicalmind

Pourquoi devrions-nous vous engager alors que nous avons une application sophistiquée utilisant un ORM correctement optimisé et implémentant des systèmes de mise en cache tels que memcached ?

C'est une question sérieuse, ils devraient pouvoir justifier leur existence. Comme Jeff Atwood aime à dire " le matériel est bon marché, les programmeurs sont chers "

2
Jim Mitchener
  • Quels types de base de données vous ont causé, en tant que développeur, plus de difficultés à comprendre et à déboguer? Réponse attendue, IMHO, expérience des problèmes liés à différents types de date/d'horodatage et de BLOB.

  • Quand est-il opportun d'utiliser des index bitmap?

1
JuanZe

Presque tout est mentionné ici. Je voudrais partager une question qui m'a été posée par un cadre supérieur sur la base de données. J'ai trouvé la question très intéressante et si vous y réfléchissez en profondeur, cela a beaucoup de sens.

La question était - Comment décririez-vous la base de données à votre enfant de 5 ans?

1
Shamik

Quoi explain plan fait et comment interprète les résultats que vous obtenez.

1
David Oneill

L'application est utilisée 24 heures par jour. Votre fenêtre de maintenance/mise à jour est de 2 heures par mois. Comment comptez-vous minimiser les perturbations?

1
Tim Jarvis

Donnez un exemple où la dénomralisation est préférable.

(J'aime celui-ci parce que les gens se déchaînent et cherchent à tout mettre en 3ème forme normale)

1
Will
  • Comment détecter et résoudre les problèmes de concurrence dans la couche d'application?
  • Quels paradigmes de verrouillage sont généralement disponibles et discutez de leurs avantages et inconvénients.
  • Discutez des valeurs NULL et des problèmes associés.
  • Quel est le plus grand système de base de données sur lequel vous avez travaillé: # tables, # lignes, # utilisateurs.

Également les questions suivantes spécifiques à la plate-forme (SQL Server):

  • Discutez des colonnes IDENTITY.
  • Quel est le type de données timestamp utilisé?
1
Disillusioned
  • Quels sont les inconvénients de l'utilisation d'instructions SQL adhoc/à la volée et que feriez-vous à la place?

Cette zone peut avoir un impact énorme sur les performances et la sécurité de la base de données. Ne vous y trompez pas et vous pourriez vous retrouver dans un monde de douleur.

  • Dans quelles situations utiliseriez-vous des instructions SQL adhoc/à la volée?

Parce qu'il y a toujours une exception à la règle :)

0
AdaTheDev
  • Expliquez la différence entre une jointure interne et externe.
  • Qu'est-ce qu'un produit cartésien?
  • Expliquez la 3ème forme normale
0
keithwarren7
  • Expliquer les contraintes possibles sur les tables
  • Expliquer les vues (et matérialisées)
  • Expliquer les séquences
  • Expliquer les déclencheurs
0
R van Rijn