2009-08-02 45 views
81

Tomando un pico en la base de datos information_schema y alcanzando el metadatos para uno de mis proyectos favoritos, estoy teniendo dificultades para entender qué (si cualquier) diferencias que existan entre el comando create schema y el comando create database para MySQL.MySQL 'crear esquema' y 'crear base de datos' - ¿Hay alguna diferencia

¿Hay alguna diferencia? Si no, ¿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 en el mismo nivel que una base de datos).

Gracias!

Respuesta

111

El documentation of MySQL says:

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

Por lo tanto, parece normal que esas dos instrucciones hagan lo mismo.

+1

¡Excelente! Supuse que el esquema es parte de una instancia de la Base de datos. ¡¡Muchas gracias!! – asgs

24

Mysql documentation dice: CREATE SCHEMA es un sinónimo de CREATE DATABASE a partir de MySQL 5.0.2.


todo esto vuelve a un estándar ANSI para SQL a mediados de los años 80.

Ese estándar tenía un comando "CREATE SCHEMA" y sirvió para introducir espacios de nombres múltiples para nombres de tablas y vistas. Todas las tablas y vistas fueron creadas 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 aquel entonces) realmente lo implementó, todo el concepto era más una teoría que una práctica.

otoh, ISTR esta versión de la norma no tiene el concepto de un "usuario" o un "CREATE USER" de comandos, por lo que hubo productos que utilizan el concepto de un "usuario" (que entonces tenía su espacio de nombre propio para tablas y vistas) para implementar su equivalente de "esquema".

Esta es un área donde los sistemas son diferentes.

En lo que respecta a la administración, esto no debería importar demasiado, porque aquí tiene diferencias de todos modos.

Por lo que respecta al código de la aplicación, "solo" tiene que importar casos en los que una aplicación accede a las tablas desde espacios de nombres múltiples. AFAIK, todos los sistemas admiten una sintaxis ".", y para esto no debería importar si el espacio de nombre es el de un usuario , un "esquema" o una "base de datos".

+2

¿Qué es 'ISTR'? – DerMike

+0

@DerMike I Seem To Recall, http://www.internetslang.com/ISTR-meaning-definition.asp – reevesy

+2

Sería correcto dar una referencia a la fuente original, de donde se tomó esta respuesta: http: // lists.mysql.com/mysql/211647 – informatik01

4

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.

4

Estrictamente hablando, la diferencia entre la base de datos y esquema se inexisting en MySQL.

Sin embargo, este no es el caso en otros motores de base de datos como SQL Server. En el servidor SQL :,

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

Por defecto, todas las tablas de SQL Server pertenecen a un esquema predeterminado denominado DBO. Cuando se consulta una tabla que no ha sido asignado a ningún esquema particular, puede hacer algo como:

SELECT * 
FROM your_table 

lo que equivale a:

SELECT * 
FROM dbo.your_table 

Ahora, SQL Server permite la creación de diferentes esquema, que le 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 denominado ventas, con mesas como facturas, creditorders (y cualquier otra relacionada con las ventas), y otro esquema denominado de búsqueda, con mesas como países, monedas, tipos de suscripción (y cualquier otra tabla utilizada como tabla de consulta).

Las tablas asignadas 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 predeterminado dbo).

Existen esquemas especiales en SQL Server. Para citar el mismo libro:

Existen varios esquemas de bases de datos integradas, y no se puede quitar o alterado:

1) DBO, el esquema predeterminado.

2) huésped contiene objetos disponibles para un usuario huésped ("usuario invitado" es un papel especial en la jerga de SQL Server, con algún defecto y permisos altamente restringido). Raramente usado.

3) INFORMATION_SCHEMA, utilizado por el esquema Información Visto

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

esquemas no son sólo para la agrupación. En realidad, es posible otorgar diferentes permisos para cada esquema a diferentes usuarios, como se describe en MSDN.

Haciendo esta manera, el esquema de búsqueda mencionado anteriormente podría hacerse disponible para cualquier usuario estándar en la base de datos (por ejemplo, sólo SELECT permisos), mientras que una tabla llamada supplierbankaccountdetails pueden ser asignados en un esquema diferente llamado financiera, y para dar acceso únicamente a los usuarios en el grupo accounts (solo un ejemplo, se entiende la idea).

Por último, y citando el mismo libro de nuevo:

No es el mismo esquema de base de datos y esquematabla. El primero es el espacio de nombre de una tabla, mientras que el último hace referencia a la definición de tabla

Cuestiones relacionadas