Biorąc szczyt do information_schema
bazy danych i podchodząc do metadanych dla jednego z moich projektów dla zwierząt domowych, trudno mi zrozumieć, jakie (jeśli w ogóle) istnieją różnice między create schema
poleceniem a create database
poleceniem MySQL.
Czy są jakieś różnice? Jeśli nie, to czy jest to raczej typowy wzorzec zachowania dla relacyjnych baz danych (słyszałem, że w przypadku innych baz danych, takich jak Oracle, schemat istnieje w bazie danych, a nie jest na tym samym poziomie co baza danych).
Dzięki!
Dokumentacja MySQL mówi: CREATE SCHEMA jest synonimem CREATE DATABASE od MySQL 5.0.2.
wszystko to wraca do standardu ANSI dla SQL w połowie lat 80-tych.
Ten standard miał polecenie „CREATE SCHEMA” i służył do wprowadzenia wielu przestrzeni nazw dla nazw tabel i widoków. Wszystkie tabele i widoki zostały utworzone w ramach „schematu”. Nie wiem, czy ta wersja definiowała dostęp do tabel i widoków w różnych schematach, ale zakładam, że tak. AFAIR, żaden produkt (przynajmniej wtedy) tak naprawdę go nie wdrażał, cała koncepcja była bardziej teorią niż praktyką.
OTOH, ISTR ta wersja standardu nie zawierała pojęcia „użytkownika” ani „UTWÓRZ UŻYTKOWNIKA”, więc istniały produkty, które wykorzystywały pojęcie „użytkownika” (który miał wtedy własną przestrzeń nazw dla tabel i widoki), aby zaimplementować ich odpowiednik „schematu”.
To obszar, w którym systemy się różnią.
Jeśli chodzi o administrację, nie powinno to mieć większego znaczenia, bo tutaj i tak są różnice.
Jeśli spojrzysz na kod aplikacji, musisz zająć się „tylko” przypadkami, w których jedna aplikacja uzyskuje dostęp do tabel z wielu przestrzeni nazw. AFAIK, wszystkie systemy obsługują składnię „.” I nie powinno mieć tu znaczenia, czy przestrzeń nazw jest przestrzenią użytkownika, „schematem” czy „bazą danych”.
źródło
Ściśle mówiąc, różnica między Database i Schema jest inexisting w MySQL.
Jednak nie dotyczy to innych silników baz danych, takich jak SQL Server. Na serwerze SQL :,
Domyślnie wszystkie tabele w SQL Server należą do domyślnego schematu o nazwie dbo . Kiedy odpytujesz tabelę, która nie została przydzielona do żadnego konkretnego schematu, możesz zrobić coś takiego:
co jest równoważne z:
Teraz serwer SQL pozwala na tworzenie różnych schematów, co daje możliwość grupowania tabel o podobnym przeznaczeniu. To pomaga uporządkować bazę danych.
Na przykład możesz utworzyć schemat o nazwie sprzedaż z tabelami, takimi jak faktury , zlecenia kredytowe (i wszelkie inne związane ze sprzedażą) oraz inny schemat zwany wyszukiwaniem , z tabelami takimi jak kraje , waluty , typy subskrypcji (i wszelkie inne tabele używane jako wygląd w górę tabeli).
Tabele przydzielone do określonej domeny są wyświetlane w programie SQL Server Studio Manager z nazwą schematu poprzedzoną nazwą tabeli (dokładnie tak samo, jak tabele należące do domyślnego schematu dbo ).
W SQL Server są specjalne schematy. Cytując tę samą książkę:
Schematy służą nie tylko do grupowania. W rzeczywistości możliwe jest nadanie różnych uprawnień dla każdego schematu różnym użytkownikom, zgodnie z opisem MSDN .
W ten sposób wspomniane powyżej wyszukiwanie schematu mogłoby być udostępnione każdemu standardowemu użytkownikowi w bazie danych (np.
SELECT
Tylko uprawnienia), podczas gdy tabela o nazwie dostawcabankaccountdetails może być przydzielona w innym schemacie zwanym finansowym i dawać dostęp tylko użytkownikom w grupęaccounts
(tylko przykład, masz pomysł).Wreszcie, cytując ponownie tę samą książkę:
źródło
CREATE SCHEMA jest synonimem CREATE DATABASE. Składnia CREATE DATABASE
źródło
Baza danych to zbiór schematów, a schemat to zbiór tabel. Ale w MySQL używają go w ten sam sposób.
źródło
Tak więc nie ma różnicy między „bazą danych” MySQL a „schematem” MySQL: są to dwie nazwy tego samego - przestrzeni nazw dla tabel i innych obiektów bazy danych.
Dla osób z doświadczeniem w Oracle: „Baza danych” MySQL, inaczej „Schemat” MySQL, odpowiada schematowi Oracle. Różnica między poleceniami MySQL i Oracle CREATE SCHEMA polega na tym, że w Oracle polecenie CREATE SCHEMA w rzeczywistości nie tworzy schematu, ale raczej wypełnia go tabelami i widokami. A polecenie Oracle CREATE DATABASE robi zupełnie inne rzeczy niż jego odpowiednik MySQL.
źródło