En prenant un pic dans la information_schema
base de données et en atteignant les métadonnées pour l'un de mes projets familiers, j'ai du mal à comprendre les différences (le cas échéant) entre la create schema
commande et la create database
commande pour MySQL.
Y a-t-il des différences? Sinon, est-ce un modèle de comportement plutôt typique pour les bases de données relationnelles (j'ai entendu dire que pour d'autres bases de données, comme Oracle, un schéma existe dans une base de données, plutôt que d'être au même niveau qu'une base de données).
Merci!
La documentation Mysql dit: CREATE SCHEMA est un synonyme de CREATE DATABASE à partir de MySQL 5.0.2.
tout cela remonte à une norme ANSI pour SQL au milieu des années 80.
Cette norme avait une commande "CREATE SCHEMA", et elle servait à introduire plusieurs espaces de nom pour les noms de table et de vue. Toutes les tables et vues ont été créées dans un "schéma". Je ne sais pas si cette version a défini un accès croisé aux tables et aux vues, mais je suppose que c'est le cas. AFAIR, aucun produit (du moins à l'époque) ne l'a vraiment mis en œuvre, tout ce concept était plus de la théorie que de la pratique.
OTOH, ISTR cette version de la norme n'avait pas le concept d'un "utilisateur" ou une commande "CREATE USER", il y avait donc des produits qui utilisaient le concept d'un "utilisateur" (qui avait alors son propre espace de nom pour les tables et views) pour implémenter leur équivalent de "schema".
C'est un domaine où les systèmes diffèrent.
En ce qui concerne l’administration, cela ne devrait pas avoir trop d’importance, car ici, vous avez quand même des différences.
En ce qui concerne le code de l'application, vous n'avez «que» à vous soucier des cas où une application accède aux tables à partir de plusieurs espaces de noms. AFAIK, tous les systèmes supportent une syntaxe ".", Et pour cela peu importe que l'espace de nom soit celui d'un utilisateur, un "schéma" ou une "base de données".
la source
À proprement parler, la différence entre Database et Schema n'existe pas dans MySql.
Cependant, ce n'est pas le cas dans d'autres moteurs de base de données tels que SQL Server. Dans le serveur SQL :,
Par défaut, toutes les tables de SQL Server appartiennent à un schéma par défaut appelé dbo . Lorsque vous interrogez une table qui n'a été allouée à aucun schéma particulier, vous pouvez faire quelque chose comme:
ce qui équivaut à:
Désormais, le serveur SQL permet la création de schémas différents, ce qui vous donne la possibilité de regrouper des tables partageant un objectif similaire. Cela aide à organiser la base de données.
Par exemple, vous pouvez créer un schéma appelé ventes , avec des tables telles que les factures , les commandes de crédit (et tout autre schéma lié aux ventes), et un autre schéma appelé lookup , avec des tables telles que les pays , les devises , les types d'abonnement (et toute autre table utilisée comme look table).
Les tables allouées à un domaine spécifique sont affichées dans SQL Server Studio Manager avec le nom du schéma ajouté au nom de la table (exactement le même que les tables appartenant au schéma dbo par défaut ).
Il existe des schémas spéciaux dans SQL Server. Pour citer le même livre:
Les schémas ne servent pas uniquement au regroupement. Il est en fait possible de donner des autorisations différentes pour chaque schéma à différents utilisateurs, comme décrit MSDN .
En procédant de cette manière, la recherche de schéma mentionnée ci-dessus pourrait être mise à la disposition de n'importe quel utilisateur standard de la base de données (par exemple,
SELECT
autorisations uniquement), alors qu'une table appelée supplierbankaccountdetails peut être allouée dans un schéma différent appelé financier , et pour ne donner accès qu'aux utilisateurs de le groupeaccounts
(juste un exemple, vous voyez l'idée).Enfin, et en citant à nouveau le même livre:
la source
CREATE SCHEMA est un synonyme de CREATE DATABASE. Syntaxe de CREATE DATABASE
la source
La base de données est une collection de schémas et le schéma est une collection de tables. Mais dans MySQL, ils l'utilisent de la même manière.
la source
Il n'y a donc aucune différence entre la "base de données" MySQL et le "schéma" MySQL: ce sont deux noms pour la même chose - un espace de noms pour les tables et autres objets DB.
Pour les personnes ayant une formation Oracle: MySQL "base de données" aka MySQL "schéma" correspond au schéma Oracle. La différence entre les commandes MySQL et Oracle CREATE SCHEMA est que dans Oracle, la commande CREATE SCHEMA ne crée pas réellement de schéma mais le remplit plutôt avec des tables et des vues. Et la commande CREATE DATABASE d'Oracle fait une chose très différente de son homologue MySQL.
la source