Al echar un vistazo a la information_schema
base de datos y a los metadatos de uno de mis proyectos favoritos, me cuesta entender qué diferencias (si las hay) existen entre el create schema
comando y el create database
comando para MySQL.
¿Hay alguna diferencia? De lo contrario, ¿es este un patrón de comportamiento bastante típico para las bases de datos relacionales (he oído que para otras bases de datos, como Oracle, existe un esquema en una base de datos, en lugar de estar al mismo nivel que una base de datos)?
¡Gracias!
La documentación de Mysql dice: CREATE SCHEMA es un sinónimo de CREATE DATABASE a partir de MySQL 5.0.2.
todo esto se remonta a un estándar ANSI para SQL a mediados de los 80.
Ese estándar tenía un comando "CREATE SCHEMA" y servía para introducir múltiples espacios de nombres para los nombres de tablas y vistas. Todas las tablas y vistas se crearon dentro de un "esquema". No sé si esa versión definió algún acceso de esquema cruzado a tablas y vistas, pero supongo que sí. AFAIR, ningún producto (al menos en ese entonces) realmente lo implementó, todo ese concepto era más teoría que práctica.
OTOH, ISTR esta versión del estándar no tenía el concepto de un "usuario" o un comando "CREAR USUARIO", por lo que había productos que usaban el concepto de un "usuario" (que luego tenía su propio espacio de nombres para tablas y vistas) para implementar su equivalente de "esquema".
Esta es un área donde los sistemas difieren.
En lo que respecta a la administración, esto no debería importar demasiado, porque de todos modos aquí hay diferencias.
En lo que respecta al código de la aplicación, "solo" debe preocuparse por los casos en los que una aplicación accede a tablas desde varios espacios de nombres. AFAIK, todos los sistemas admiten una sintaxis ".", Y para ello no debería importar si el espacio de nombres es el de un usuario, un "esquema" o una "base de datos".
fuente
Estrictamente hablando, la diferencia entre Database y Schema no existe en MySql.
Sin embargo, este no es el caso en otros motores de bases de datos como SQL Server. En el servidor SQL :,
De forma predeterminada, todas las tablas de SQL Server pertenecen a un esquema predeterminado llamado dbo . Cuando consulta una tabla que no se ha asignado a ningún esquema en particular, puede hacer algo como:
que es equivalente a:
Ahora, SQL Server permite la creación de diferentes esquemas, lo que te da la posibilidad de agrupar tablas que comparten un propósito similar. Eso ayuda a organizar la base de datos.
Por ejemplo, puede crear un esquema llamado ventas , con tablas como facturas , acreedores (y cualquier otro relacionado con ventas), y otro esquema llamado lookup , con tablas como países , monedas , tipos de suscripción (y cualquier otra tabla utilizada como lookup) . mesa arriba).
Las tablas que se asignan a un dominio específico se muestran en SQL Server Studio Manager con el nombre de esquema antepuesto al nombre de la tabla (exactamente igual que las tablas que pertenecen al esquema dbo predeterminado ).
Hay esquemas especiales en SQL Server. Para citar el mismo libro:
Los esquemas no son solo para agrupar. De hecho, es posible otorgar diferentes permisos para cada esquema a diferentes usuarios, como describe MSDN .
De esta manera, la búsqueda de esquema mencionada anteriormente podría estar disponible para cualquier usuario estándar en la base de datos (por ejemplo,
SELECT
solo permisos), mientras que una tabla llamada Supplierbankaccountdetails puede asignarse en un esquema diferente llamado Financial , y para dar solo acceso a los usuarios en el grupoaccounts
(solo un ejemplo, entiendes).Finalmente, y citando el mismo libro nuevamente:
fuente
CREATE SCHEMA es sinónimo de CREATE DATABASE. Sintaxis CREATE DATABASE
fuente
La base de datos es una colección de esquemas y el esquema es una colección de tablas. Pero en MySQL lo usan de la misma manera.
fuente
Por lo tanto, no hay diferencia entre la "base de datos" de MySQL y el "esquema" de MySQL: estos son dos nombres para lo mismo: un espacio de nombres para tablas y otros objetos de base de datos.
Para personas con experiencia en Oracle: la "base de datos" MySQL también conocida como "esquema" de MySQL corresponde al esquema de Oracle. La diferencia entre los comandos CREATE SCHEMA de MySQL y Oracle es que en Oracle el comando CREATE SCHEMA no crea realmente un esquema, sino que lo llena con tablas y vistas. Y el comando CREATE DATABASE de Oracle hace algo muy diferente a su contraparte de MySQL.
fuente