MySQL "Створити схему" та "Створити базу даних" - Чи є різниця


104

Отримавши пік у information_schemaбазі даних та ввівшись у метадані одного з моїх домашніх проектів, мені важко зрозуміти, які (якщо такі є) відмінності між create schemaкомандою та create databaseкомандою для MySQL.

Чи є відмінності? Якщо ні, то це досить типова модель поведінки для реляційних баз даних (я чув, що для інших баз даних, таких як Oracle, в базі даних існує схема, а не на тому ж рівні, що і база даних).

Дякую!

Відповіді:


140

Документації MySQL каже :

CREATE DATABASE створює базу даних із заданим іменем. Щоб використовувати цей вислів, вам потрібна привілей CREATE для бази даних. CREATE SCHEMA - синонім CREATE DATABASE від MySQL 5.0.2.

Отже, здавалося б нормальним, що ці дві інструкції роблять те саме.


1
Відмінно! Я припускав, що схема є частиною екземпляра Бази даних. Дуже дякую!!
asgs

27

Документація Mysql говорить: CREATE SCHEMA є синонімом CREATE DATABASE від MySQL 5.0.2.


все це повертається до стандарту ANSI для SQL в середині 80-х.

Цей стандарт мав команду "CREATE SCHEMA", і він служив для введення декількох просторів імен для таблиць та перегляду імен. Усі таблиці та представлення були створені в рамках "схеми". Я не знаю, чи визначала ця версія якийсь міжсхемовий доступ до таблиць та представлень, але я припускаю, що це було. AFAIR, жоден продукт (принаймні тоді) не реалізував його, ціла концепція була більше теорією, ніж практикою.

OTOH, ISTR у цій версії стандарту не було поняття "користувач" або команда "CREATE USER", тому були продукти, які використовували поняття "користувач" (який тоді мав власний простір імен для таблиць і погляди) реалізувати їх еквівалент "схемі".

Це область, де системи відрізняються.

Що стосується адміністрації, це не повинно мати великого значення, адже тут у вас все одно є відмінності.

Що стосується коду програми, то "лише" потрібно дбати про випадки, коли одна програма звертається до таблиць з декількох просторів імен. AFAIK, всі системи підтримують синтаксис ".", І для цього не має значення, чи є простір імен у користувача, "схема" чи "база даних".


@DerMike Я, здається,
нагадую

2
Правильно було б посилатися на першоджерело, звідки була взята ця відповідь: list.mysql.com/mysql/211647
informatik01

@ informatik01 Якщо тільки Адіночества - оригінальний плакат.
FanaticD

SQL Server реалізував SCHEMA як групу таблиць / типів / .. у базі даних
Gudgip

7

Строго кажучи, різниця між Базою даних і Схемою існує в MySql.

Однак це не так у інших двигунах баз даних, таких як SQL Server. На сервері SQL:

Кожна таблиця належить до групи об’єктів у базі даних, що називається схемою бази даних . Це контейнер або простір імен ( Запит на Microsoft SQL Server 2012 )

За замовчуванням всі таблиці в SQL Server належать до схеми за замовчуванням під назвою dbo . Коли ви запитуєте таблицю, яка не була виділена жодній конкретній схемі, ви можете зробити щось на кшталт:

SELECT *
FROM your_table

що еквівалентно:

SELECT *
FROM dbo.your_table

Тепер SQL-сервер дозволяє створювати різні схеми, що дає можливість групувати таблиці, що мають аналогічне призначення. Це допомагає впорядкувати базу даних.

Наприклад, ви можете створити схему під назвою продаж із таблицями, такими як рахунки-фактури , кредитні рахунки (та будь-які інші, пов’язані з продажами), та іншу схему, що називається пошук , із таблицями, такими як країни , валюти , типи підписки (та будь-яку іншу таблицю, яка використовується як вигляд вгору таблиці).

Таблиці, виділені певному домену, відображаються в диспетчері SQL Server Studio з назвою схеми, попередньо вказаною до імені таблиці (точно так само, як таблиці, що належать до стандартної схеми dbo ).

У SQL Server є спеціальні схеми. Цитувати ту саму книгу:

Існує кілька вбудованих схем баз даних, і їх неможливо відкинути або змінити:

1) dbo , схема за замовчуванням.

2) гість містить об'єкти, доступні гостьовому користувачеві ("гостьовий користувач" - особлива роль у мові SQL Server, з деякими дозволами та дуже обмеженими дозволами). Рідко використовується.

3) ІНФОРМАЦІЯ_ШЕМА , використовувана в переглядах інформаційної схеми

4) sys , зарезервовані виключно для внутрішнього використання SQL Server

Схеми призначені не лише для групування. Насправді можна надати різні дозволи для кожної схеми різним користувачам, як описано в MSDN .

Таким чином, згаданий вище пошук схеми може бути доступний будь-якому стандартному користувачеві в базі даних (наприклад, SELECTлише дозволи), тоді як таблиця під назвою постачальник рахунків рахунків може бути розподілена в іншій схемі, що називається фінансовою , і надавати доступ лише користувачам у група accounts(лише приклад, ви отримуєте ідею).

Нарешті, і знову цитуючи ту саму книгу:

Це не та сама схема бази даних та схема таблиці . Перший є простором імен таблиці, тоді як останній стосується визначення таблиці



5

База даних - це сукупність схем, а схема - це сукупність таблиць. Але в MySQL вони використовують це так само.


1

Отже, різниці між "базою даних" MySQL та "схемою" MySQL немає: це два імені для однієї і тієї ж речі - простір імен для таблиць та інших об'єктів БД.

Для людей з фоном Oracle: MySQL "база даних" ака MySQL "схема" відповідає схемі Oracle. Різниця між командами MySQL та Oracle CREATE SCHEMA полягає в тому, що в Oracle команда CREATE SCHEMA насправді не створює схему, а просто заповнює її таблицями та видами. І команда CREATE DATABASE Oracle робить зовсім іншу річ, ніж її аналог MySQL.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.