web-dev-qa-db-fra.com

Différences entre la base de données et le schéma utilisant différentes bases de données?

Quelles sont les différences de terminologie de base de données entre MS SQL et MySQL?

Une instance MySQL peut-elle avoir plus d'une base de données? Il semble qu'il ne peut créer que des schémas différents. Cependant, la commande SQL est create database.

Dans MS SQL, vous pouvez créer plusieurs bases de données… ont chacune un schéma par défaut de dbo?… Mais plusieurs schémas dans une base de données sont toujours possibles?

42
user48545

De cela lien , nous voyons que les schémas MS SQL ne sont plus liés aux utilisateurs, voici la citation pertinente:

Le comportement des schémas a changé dans SQL Server 2005. Les schémas ne sont plus équivalents aux utilisateurs de base de données; chaque schéma est désormais un espace de noms distinct qui existe indépendamment de l'utilisateur de la base de données qui l'a créé. En d'autres termes, un schéma est simplement un conteneur d'objets. Un schéma peut appartenir à n'importe quel utilisateur et sa propriété est transférable.

Dans MySQL, les bases de données et les schémas sont exactement la même chose, vous pouvez même échanger le mot dans les commandes, c'est-à-dire que CREATE DATABASE a le synonyme CREATE SCHEMA.

MySQL prend en charge plusieurs bases de données (schémas) et MS SQL prend en charge plusieurs bases de données et plusieurs schémas.

69
Lance Roberts

En général, j'ai trouvé l'article suivant sur Wikipedia utile.

Au bas de l'article se trouve ce qui suit:

La spécification SQL précise ce qu'est un "schéma SQL"; cependant, différentes bases de données l'implémentent incorrectement. Pour aggraver cette confusion, la fonctionnalité peut, lorsqu'elle est incorrectement implémentée, chevaucher celle de la base de données parent. Un schéma SQL est simplement un espace de noms dans une base de données, les choses dans cet espace de noms sont traitées en utilisant le point d'opérateur membre ".". Cela semble être un universel parmi toutes les implémentations. Une véritable requête entièrement qualifiée (base de données, schéma et table) est illustrée comme suit: select * from database.schema.table

Maintenant, le problème, à la fois un schéma et une base de données peut être utilisé pour isoler une table, foo d'une autre table nommée foo. Voici un pseudo-code: select * from db1.foo contre. select * from db2.foo (pas de schéma explicite entre la base de données et la table) select * from [db1.]default.foo contre. select * from [db1.]alternate.foo (pas de préfixe db explicite) Le problème qui se pose est que les anciens utilisateurs de MySQL créeront plusieurs bases de données pour un projet. Dans ce contexte, les bases de données MySQL ont une fonction analogue aux schémas Postgres, dans la mesure où Postgres ne dispose pas de la fonctionnalité de base de données croisée standard de MySQL. Inversement, Postgres a appliqué une plus grande partie de la spécification mettant en œuvre des tableaux croisés et des schémas croisés, puis laissé de la place pour les futures fonctionnalités de bases de données croisées. Les alias MySQL en arrière-plan, le schéma avec la base de données, tels que créer le schéma, et créer la base de données sont des analogues.

On peut dire que MySQL a donc implémenté une fonctionnalité de table croisée, ignoré complètement la fonctionnalité de schéma et fourni des fonctionnalités similaires dans leur implémentation d'une base de données . En résumé, Postgres prend entièrement en charge les schémas, mais manque de certaines fonctionnalités de MySQL avec les bases de données, tandis que MySQL n'essaie même pas de prendre en charge les vrais schémas.

30
Greg Roberts

Je crois qu'en disant "schéma" pour MS SQL, vous voulez dire "propriétaire".

D'après ma compréhension, dans MySQL lorsque vous faites un

SELECT * from world.city;

Cette requête sélectionne dans la base de données mondiale la ville de la table.

Dans MsSQL, vous devrez faire un

SELECT * from world.dbo.city;

Où 'dbo' est le propriétaire par défaut de la table.

Pour vous simplifier la vie, définissez la base de données par défaut en tapant

USE world
SELECT * from city;

Dans MySQL, il n'y a aucun moyen de déclarer le propriétaire de la table. c'est à dire. "dbo".

4
Yada

MS SQL Prend définitivement en charge plusieurs bases de données, chacune avec 1 à plusieurs schémas, dbo est simplement la valeur par défaut à des fins de compatibilité descendante.

2
Andrew