Est-ce que quelqu'un qui a travaillé de manière extensible SQL-sage avec au moins deux produits Top DB (tels que Oracle, SQL Server, Informix, Sybase, DB2, Teradata) Sachez comment différents dialectes SQL du fournisseur de DB sont les uns des autres. Depuis que je viens d'un angle oracle, je suis particulièrement intéressé par
start with .. connect by
vient à l'esprit)select x, y from a, b where...
)Probablement, la question résume si et dans quelle mesure ces caractéristiques sont réglementées par une norme ANSI.
Pratiquement, j'aimerais savoir s'il y a une "règle de pouce" qui indiquerait si (et comment) je peux prendre une instruction SQL DML qui fonctionne sur une base de données et la laisse exécuter sur une autre base de données.
ANSI est une organisation privée à but non lucratif qui crée des normes volontaires. En tant que tel, cela ne réglemente rien. Souvent, c'est à l'avantage d'une entreprise de suivre des normes reconnues, c'est pourquoi de nombreuses sociétés de base de données suivent la norme ANSI pour SQL. Bien sûr, chaque entreprise cherche à différencier leurs produits, ils développeront des fonctionnalités supplémentaires au-delà des normes.
De W3schools :
Bien que SQL soit une norme ANSI (American National Standards Institute), il existe de nombreuses versions différentes de la langue SQL.
Cependant, être conforme à la norme ANSI, ils supportent tous au moins les principales commandes (telles que Select, Mettre à jour, Supprimer, Insérer, où) de la même manière.
Remarque: la plupart des programmes de base de données SQL ont également leurs propres extensions exclusives en plus de la norme SQL!
Les différences entre les dialectes SQL sont trop grandes dans les zones les plus spécialisées que vous avez énumérées pour simplifier le problème jusqu'à une "règle de pointe". Dans ces situations, vous devriez probablement convertir l'ensemble de la déclaration pour chaque base de données. En faisant, chaque instruction peut être optimisée pour chaque plate-forme en tirant parti des fonctions spéciales que chaque base de données peut fournir. L'écriture SQL au plus petit dénominateur commun (ANSI) peut simplifier la migration, mais au prix de la performance.
Référence de dialectes SQL Donne des comparaisons utiles des variantes SQL. Pour plus d'informations, je vous recommande de rechercher les dialectes spécifiques que vous changez de comme ceci:
differences between mysql and Oracle sql
À un moment ou à un autre, j'ai travaillé avec toutes les bases de données que vous mentionnez. Malheureusement, j'ai constaté que cela ne prend pas beaucoup de temps pour la syntaxe de s'écarter de leurs propres arômes, pour autre chose que la sélection, l'insertion, la mise à jour et la suppression les plus simples. Lorsqu'il arrivera à certaines des catégories que vous suggérez, cela obtiendra rapidement un fournisseur spécifique. J'ai toujours dû "porter" mon SQL d'une plate-forme à une autre. Bien que je puisse retourner quelques années, j'ai été surpris de la manière dont Différents SQL Server et Teradata SQL étaient pour une mise à jour avec quelques jointures.
Chaque fournisseur est généralement conforme à un noyau minimum de syntaxe standard. SQL-92 est généralement la norme la plus conforme. Ils ajoutent ensuite des fonctionnalités supplémentaires en plus de cela. SQL3 ajoute une fonctionnalité procédurale à la norme Syntaxe. La conformité à cette norme est beaucoup plus faible. Les fournisseurs feront souvent des revendications à une certaine conformité. Se conformer à la norme signifie uniquement qu'ils fournissent "au moins" cette fonctionnalité. Ils peuvent fournir n'importe quelle quantité de fonctionnalité et donc syntaxe au-delà de cette norme. Chaque fournisseur de base de données ajoute également une fonctionnalité spécifique à la manière dont ils implémentent leur structure de base de données. C'est ainsi que chaque fournisseur de base de données tente de fournir un avantage sur leur concurrence. Une différence mineure ou sans syntaxe ne sont courantes pour une fonctionnalité plus universelle, mais depuis que beaucoup de personnes prennent la décision concernant leur fournisseur de base de données basée sur les fonctionnalités supplémentaires qu'ils fournissent ou prennent en charge peuvent être la fonctionnalité clé très différente ou inexistante entre les fournisseurs.
Il suffit de les jeter pour la discussion, même si cela aurait pu être un commentaire également. C'est pourquoi la plupart des gens aiment utiliser les différents cadres, comme l'entitéFramework et Linq, où toute l'abstraction sous-jacente de la requête est reléguée à la couche d'application et que le Datalayer n'est que du stockage plat.
Notez que cela donne un autre avantage à la foule NOSQL, car la base de données est juste un support de stockage.
Certains fournisseurs de base de données fournissent des informations détaillées sur leur conformité standard ANSI SQL. Pour Teradata, ils répertorient spécifiquement les normes SQL pour chaque élément de la norme ANSI, et pour chaque élément détaillé - comme pour chaque fonction, type de données, etc. Je n'ai pas vu d'affirmations générales sur la conformité Teradata, mais j'ai effectué la recherche deux documents pour "SQL: 2", qui obtiendrait une conformité récente ANSI. Elles sont conformes à ANSI SQL: 2011 pour tout ce que les déclencheurs, les procédures stockées et les littéraux hexagonaux, conformes à SQL: 2008.
Le diable est dans les détails et vous devez les avoir pour déterminer comment si une base de données est conforme à ANSI SQL à n'importe quel niveau. En outre, il ne suffit pas d'adapter l'ancien standard de SQL-92 (AKA SQL2). Si un fournisseur fournit un bon soutien pour une norme plus récente, cela ne dit pas beaucoup de la qualité de la base de données?
Un bon endroit pour obtenir des informations à comparer la base de données est "SQL en une noisette", la 2e ou la 3ème édition, par Kline, Kline et Hunt, et publié par O'Reilly. Ils ont plusieurs tables qui comparent différentes fonctionnalités de base de données à SQL: 2003. Teradata n'est pas dans la liste, mais comme ils sont au moins SQL: 2003 compatibles, je peux utiliser la liste pour comparer les fonctionnalités de la base de données.
En regardant les listes du livre O'Reilly, je peux trouver des fonctionnalités à Oracle qui ne prennent pas en charge la norme SQL: 2003. Bien sûr, je dois vérifier à Oracle Documentation pour vérifier ces faits, car ce livre est daté. Ensuite, l'Oracle à SQL: 2003 La comparaison m'aidera dans mon grand projet de conversion de Oracle à Teradata.