Domanda

Perché le distribuzioni SQL sono così non standard nonostante esista uno standard ANSI per SQL?Ci sono davvero così tante differenze significative nel modo in cui funzionano i database SQL o sono solo i due database con cui ho lavorato:MS-SQL e PostgreSQL?Perché nascono queste differenze?

È stato utile?

Soluzione

È una forma di "blocco invisibile".Joel entra nei dettagli qui:

Le aziende finiscono per legare le proprie funzionalità aziendali a funzionalità non standard o strane non supportate nella loro implementazione, ciò limita la loro capacità di spostarsi dal proprio fornitore a un concorrente.

D'altra parte, è piuttosto miope perché chiunque abbia un po' di cervello tenderà ad astrarre i pezzi proprietari, o ad evitare del tutto il lock-in, se diventa troppo eclatante.

Altri suggerimenti

Lo standard ANSI specifica solo un insieme limitato di comandi e tipi di dati.Una volta che si vanno oltre questi, gli implementatori sono da soli.E alcuni concetti molto importanti non sono specificati affatto, come le colonne con incremento automatico.SQLite sceglie semplicemente il primo numero intero non nullo, richiesto da MySQL AUTO INCREMENT, PostgreSQL utilizza sequenze, ecc.È un disastro, e questo si trova solo nei database OSS!Prova a convincere Oracle, Microsoft e IBM a decidere collettivamente su una funzionalità complicata.

Innanzitutto, non trovo che i database siano come, ad esempio, i browser o i sistemi operativi in ​​termini di incompatibilità.Chiunque abbia qualche ora di formazione può iniziare a eseguire selezioni, inserimenti, eliminazioni e aggiornamenti su qualsiasi database SQL.Nel frattempo, è difficile scrivere codice HTML che venga visualizzato in modo identico su ogni browser o scrivere codice di sistema per più di un sistema operativo.In genere, le differenze nell'SQL sono legate alle prestazioni o a caratteristiche abbastanza esoteriche.L'eccezione principale sembra essere costituita dai formati e dalle funzioni della data.

In secondo luogo, gli sviluppatori di database generalmente sono motivati ​​ad aggiungere funzionalità che differenziano il loro prodotto da tutti gli altri.Prodotti come Oracle, MS SQL Server e MySQL sono vasti ecosistemi che nella pratica raramente si incrociano.Nel mio posto di lavoro utilizziamo Oracle e MySQL, ma probabilmente potremmo passare a Oracle al 100% in circa un giorno, se necessario o desiderato.Quindi mi preoccupo molto degli splendidi giocattoli che Oracle ci offre con ogni versione, ma non so nemmeno quale versione di MySQL stiamo utilizzando.IBM, Microsoft, PostgreSQL e gli altri potrebbero anche non esistere, per quanto ci riguarda.Avere le funzionalità per acquisire e mantenere clienti e utenti è molto più importante della compatibilità nel mondo dei database.(Suppongo che questa sia la svolta positiva della risposta "lock-in".)

In terzo luogo, esistono ragioni legittime che spingono diverse aziende a implementare SQL in modo diverso.Ad esempio, Oracle dispone di un sistema multiversione che consente letture coerenti molto veloci e scalabili.Altri database non dispongono di questa funzionalità, ma in genere sono più rapidi nell'inserimento di righe e nel rollback delle transazioni.Questa è una differenza fondamentale in questi sistemi.Non ne rende uno migliore dell'altro (almeno nel caso generale), solo diverso.Non ci si dovrebbe sorprendere se l'SQL installato su un motore di database sfrutta i suoi punti di forza e tenta di minimizzare i suoi punti deboli.In effetti, sarebbe irresponsabile da parte degli sviluppatori non farlo.

John:Lo standard in realtà copre molti argomenti, tra cui colonne di identità, sequenze, trigger, routine, upsert, ecc.Ma, naturalmente, molti di questi componenti standard potrebbero essere stati introdotti più tardi rispetto alle prime implementazioni;e questo potrebbe essere un motivo per cui la conformità agli standard SQL è generalmente piuttosto bassa.

Neall:In realtà ci sono aree in cui lo standard SQL è in vantaggio rispetto alle implementazioni.Ad esempio, sarebbe bello avere CREATE ASSERTION, ma per quanto ne so, nessun DBMS implementa ancora le asserzioni.

Personalmente, credo che la natura chiusa di alcuni standard ISO (come lo standard SQL) sia parte del problema:Quando uno standard non è immediatamente disponibile online, è meno probabile che venga conosciuto dagli implementatori/pianificatori, e troppo pochi clienti chiedono la conformità perché non sanno cosa chiedere.

È certamente un lock-in efficace, come dice il 1800.Ma in tutta onestà nei confronti dei fornitori di database, lo standard SQL cerca sempre di recuperare il ritardo rispetto alle funzionalità dei database attuali.La maggior parte dei database che abbiamo oggi provengono da lignaggi piuttosto antichi.Se risali alle origini di Microsoft SQL Server, penso che troverai Ingres, uno dei primissimi database relazionali scritti negli anni '70.E Postgres è stato originariamente scritto da alcune delle stesse persone negli anni '80 come successore di Ingres.Oracle risale a molto tempo fa e non sono sicuro da dove sia entrato MySQL.

La non portabilità del database fa schifo, ma potrebbe essere molto peggio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top