MySQL 'crear esquema' y 'crear base de datos' - ¿Hay alguna diferencia?

104

Al echar un vistazo a la information_schemabase de datos y a los metadatos de uno de mis proyectos favoritos, me cuesta entender qué diferencias (si las hay) existen entre el create schemacomando y el create databasecomando 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!

Beto
fuente

Respuestas:

140

La documentación de MySQL dice :

CREATE DATABASE crea una base de datos con el nombre dado. Para usar esta declaración, necesita el privilegio CREAR para la base de datos. CREATE SCHEMA es un sinónimo de CREATE DATABASE a partir de MySQL 5.0.2.

Entonces, parecería normal que esas dos instrucciones hagan lo mismo.

Pascal MARTIN
fuente
1
¡Excelente! Supuse que el esquema es parte de una instancia de base de datos. ¡¡Muchas gracias!!
pregunta el
27

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".

Sadegh
fuente
@DerMike Parece recordar, internetslang.com/ISTR-meaning-definition.asp
reevesy
2
Sería correcto dar una referencia a la fuente original, de donde se tomó esta respuesta: lists.mysql.com/mysql/211647
informatik01
@ informatik01 A menos que Adinochestva sea un póster original.
FanaticD
SQL Server implementó SCHEMA como un grupo de tablas / tipos / .. dentro de una base de datos
Gudgip
7

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 :,

Cada tabla pertenece a una agrupación de objetos en la base de datos llamada esquema de base de datos . Es un contenedor o espacio de nombres ( Consultando Microsoft SQL Server 2012 )

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:

SELECT *
FROM your_table

que es equivalente a:

SELECT *
FROM dbo.your_table

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:

Hay varios esquemas de base de datos integrados y no se pueden eliminar ni modificar:

1) dbo , el esquema predeterminado.

2) invitado contiene objetos disponibles para un usuario invitado ("usuario invitado" es un rol especial en la jerga de SQL Server, con algunos permisos predeterminados y altamente restringidos). Raramente usado.

3) INFORMATION_SCHEMA , utilizado por las vistas del esquema de información

4) sys , reservado exclusivamente para uso interno de SQL Server

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, SELECTsolo 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 grupo accounts(solo un ejemplo, entiendes).

Finalmente, y citando el mismo libro nuevamente:

No es el mismo esquema de base de datos y esquema de tabla . El primero es el espacio de nombres de una tabla, mientras que el segundo se refiere a la definición de la tabla.

Nicolas
fuente
5

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.

Arun Raja
fuente
1

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.

Oleg Khaykin
fuente