Различия между базой данных и схемой с использованием разных баз данных?

Каковы различия в терминологии базы данных между MS SQL и MySQL?

Может ли экземпляр MySQL иметь более одной базы данных? Похоже, что он может создавать только разные схемы. Однако команда SQL create database.

В MS SQL вы можете создавать несколько баз данных... каждая из них имеет схему по умолчанию dbo?... но возможны еще несколько схем в базе данных?

Ответ 1

Из этой ссылки мы видим, что схемы MS SQL больше не привязаны к пользователям, здесь соответствующая цитата:

Поведение схем изменилось в SQL Сервер 2005. Схемы больше не эквивалентно пользователям баз данных; каждый схема теперь представляет собой отдельное пространство имен который существует независимо от пользователя базы данных, который создал его. В других слова, схема - это просто контейнер объектов. Схема может принадлежать любой пользователь, и его собственность передача.

В MySQL базы данных и схемы - это одно и то же, вы можете даже обменять слово в командах, т.е. CREATE DATABASE имеет синоним CREATE SCHEMA.

MySQL поддерживает несколько баз данных (схемы), а MS SQL поддерживает несколько баз данных и несколько схем.

Ответ 2

В целом, я нашел следующую статью в Википедии, чтобы быть полезной.

В нижней части статьи указано следующее:

Спецификация SQL дает понять, что такое "схема SQL"; однако разные базы данных реализуют его неправильно. Чтобы усугубить эту путаницу, функциональность может при неправильном внедрении перекрываться с функциональностью родительской базы данных. Схема SQL - это просто пространство имен в базе данных, вещи в этом пространстве имен адресуются с помощью оператора-члена ".". Это похоже на универсальность среди всех реализаций. В качестве примера приведен пример истинного полностью (базы данных, схемы и таблицы): select * from database.schema.table

Теперь проблема, как схема, так и база данных, могут использоваться для изоляции одной таблицы, foo от другой, такой как named table foo. Ниже приведен псевдокод: select * from db1.foo vs. select * from db2.foo (нет явной схемы между db и table) select * from [db1.]default.foo vs. select * from [db1.]alternate.foo (без явного префикса db). Возникающая проблема заключается в том, что бывшие пользователи MySQL создают несколько баз данных для одного проекта. В этом контексте базы данных MySQL аналогичны функциям Postgres-схем, так как Postgres не имеет готовых кросс-баз данных, которые MySQL имеет. Напротив, Postgres применил больше спецификаций, реализующих кросс-таблицу, кросс-схему, а затем оставил место для будущих функций кросс-баз данных. Алиасы MySQL за кулисами, схема с базой данных, такая, что создание схемы и создание базы данных являются аналогами.

Можно сказать, что MySQL, таким образом, реализовал функции кросс-таблицы, полностью пропустил функциональность схемы и предоставил аналогичную функциональность в своей реализации базы данных. Таким образом, Postgres полностью поддерживает схемы, но не имеет некоторых функций MySQL с базами данных, в то время как MySQL даже не пытается поддерживать истинные схемы.

Ответ 3

Я считаю, что, говоря "схема" для MS SQL, вы имеете в виду "владелец".

Из моего понимания, в MySQL, когда вы делаете

SELECT * from world.city;

Этот запрос выбирает из мировой базы данных таблицу города.

В MsSQL вам нужно будет сделать

SELECT * from world.dbo.city;

Где "dbo" является владельцем таблицы по умолчанию.

Чтобы упростить жизнь, определите базу данных по умолчанию, набрав

USE world
SELECT * from city;

В MySQL нет способа объявить владельца таблицы. то есть. 'ДБО'.

Ответ 4

MS SQL Определенно поддерживает несколько баз данных, каждая из которых содержит от 1 до многих схем, dbo - это просто по умолчанию для обратной совместимости.