Qual è la differenza tra uno schema e una tabella e un database?


155

Questa è probabilmente una domanda n00blike (o peggio). Ma ho sempre visto uno schema come una definizione di tabella in un database. Questo è sbagliato o non del tutto corretto. Non ricordo molto dai miei corsi di database.


3
In oracle lo schema è appena riferito a un utente. Cioè quando creiamo un utente lo schema verrà creato ora possiamo aggiungere tabelle, viste, pacchetti di indici ecc. Come
Ali786,

Risposte:


242

schema : database : tabella :: pianta : casa : stanza


81
Un po 'criptico, ma non sbagliato; ma pensi davvero che un n00b autoproclamato lo capirà?
Stein G. Strindhaug,

6
Buona analogia. Vorrei cambiare "planimetria" in "stampe blu" perché lo schema ha più di semplici tabelle e le stampe blu contengono il cablaggio, il riscaldamento e l'impianto idraulico.
Paul Tomblin,

4
"Schema" in realtà significa semplicemente "piano". L'ho visto usato per riferirsi all'intero database, o solo a una tabella o vista.
MusiGenesis,

@Paul: buoni punti. Inizialmente ho scritto "progetti" ma l'ho cambiato perché non connota veramente "casa" (almeno non per me).
MusiGenesis,

4
Sì, tendo a visualizzare uno schema come utente in Oracle. Quindi le definizioni variano anche da db a db: D Che fastidio.
Robert,

123

Uno schema di relazione è la definizione logica di una tabella: definisce il nome della tabella e il nome e il tipo di ciascuna colonna. È come un piano o un progetto. Uno schema di database è la raccolta di schemi di relazione per un intero database.

Una tabella è una struttura con un gruppo di righe (dette "tuple"), ognuna delle quali ha gli attributi definiti dallo schema. Le tabelle potrebbero anche contenere degli indici per facilitare la ricerca di valori su determinate colonne.

Un database è, formalmente, qualsiasi raccolta di dati. In questo contesto, il database sarebbe una raccolta di tabelle. Un DBMS (Database Management System) è il software (come MySQL, SQL Server, Oracle, ecc.) Che gestisce ed esegue un database.


1
Uno schema di database include anche indici, viste, ecc.
Paul Tomblin,

1
sicuramente questo non è corretto. un database non è una raccolta di tabelle in quanto tale. Puoi avere 30 database senza avere una tabella per esempio.
Robert,

@Robert - quale sarebbe il punto di avere un database senza tabelle in esso?
Paul Tomblin,

16
Anche se non hai tabelle, si tratta comunque di una raccolta di tabelle: è una raccolta vuota di tabelle.
Jon Skeet,

1
@Ian: non dimenticare che anche un database avrà vincoli: vincoli referenziali (chiavi primarie, chiavi esterne), vincoli di unicità e vincoli di controllo. Potrebbe anche includere trigger e procedure.
Jonathan Leffler,

16

In breve, uno schema è la definizione per l'intero database, quindi include tabelle, viste, procedure memorizzate, indici, chiavi primarie ed esterne, ecc.


12

Questo particolare post ha dimostrato di riguardare solo Oracle e la definizione di schema cambia nel contesto di un altro DB.

Probabilmente è una cosa un po 'google up ma i termini FYI sembrano variare nelle loro definizioni, che è la cosa più fastidiosa :)

In Oracle un database è un database. Nella tua testa pensa a questo come ai file di dati e ai registri di ripetizione e alla presenza fisica effettiva sul disco del database stesso (cioè non l'istanza)

Uno schema è effettivamente un utente. Più specificamente è un insieme di tabelle / processi / indici ecc. Di proprietà di un utente. Un altro utente ha uno schema diverso (tabelle che possiede), tuttavia l'utente può anche vedere gli schemi su cui ha selezionato i privilegi. Quindi un database può essere costituito da centinaia di schemi e ogni schema centinaia di tabelle. È possibile avere tabelle con lo stesso nome in schemi diversi, che si trovano nello stesso database.

Una tabella è una tabella, un insieme di righe e colonne contenenti dati ed è contenuta negli schemi.

Le definizioni possono essere diverse in SQL Server, ad esempio. Non ne sono consapevole.


11

Lo schema si comporta come un oggetto genitore visto nel mondo OOP. quindi non è un database stesso. può essere questo link è utile.

Ma, in MySQL, i due sono equivalenti. La parola chiave DATABASE o DATABASES può essere sostituita con SCHEMA o SCHEMAS ovunque appaia. Esempi:

  • CREATE DATABASE <=> CREATE SCHEMA
  • MOSTRA DATABASI <=> MOSTRA SCHEMI

Documentazione di MySQL

I termini SCHEMA e DATABASE dipendono dal DBMS.

Una tabella è un insieme di elementi di dati (valori) organizzati mediante un modello di colonne verticali (identificate dal loro nome) e righe orizzontali. Un database contiene una o più (di solito) tabelle . E memorizzi i tuoi dati in queste tabelle. Le tabelle possono essere correlate tra loro ( Vedi qui ).


risposta preziosa
sofs1

2

Altro sugli schemi:

In SQL 2005 uno schema è un modo per raggruppare oggetti. È un contenitore in cui puoi inserire oggetti. Le persone possono possedere questo oggetto. È possibile concedere diritti sullo schema.

Nel 2000 uno schema era equivalente a un utente. Ora si è liberato ed è abbastanza utile. È possibile inserire tutti i processi utente in un determinato schema e i processi di amministrazione in un altro. Concedi EXECUTE all'utente / ruolo appropriato e hai finito di concedere EXECUTE su procedure specifiche. Bello.

La notazione punto sarebbe così:

Server.Database.Schema.Object

o

myserver01.Adventureworks.Accounting.Beans


2

A Schemaè una raccolta di oggetti di database che include anche strutture logiche. Ha il nome dell'utente che lo possiede. A databasepuò avere un numero qualsiasi di schemi. Una tabella di un database può apparire in due diversi schemi con lo stesso nome. Un utente può visualizzare qualsiasi schema per il quale è stato assegnato il privilegio di selezione.


2

Come MusiGenesis ha messo così bene, nella maggior parte dei database:

schema: database: tabella :: pianta: casa: stanza

Ma in Oracle potrebbe essere più facile pensare a:

schema: database: tabella :: proprietario: casa: stanza


2

Contrariamente ad alcune delle risposte di cui sopra, ecco la mia comprensione basata sull'esperienza con ciascuna di esse:

  • MySQL: database/schema :: table
  • Server SQL: database :: (schema/namespace ::) table
  • Oracolo: database/schema/user :: (tablespace ::) table

Per favore, correggimi sul fatto che tablespace sia facoltativo o meno con Oracle, è da molto tempo che mi ricordo di averli usati.


1

In oracle Schema è un utente in un database, ad esempio scott è uno schema nel database orcl. In un database potremmo avere molti schemi come scott


1

Un database contiene uno o più schemi denominati, che a loro volta contengono tabelle. Gli schemi contengono anche altri tipi di oggetti denominati, inclusi tipi di dati, funzioni e operatori. Lo stesso nome oggetto può essere utilizzato in diversi schemi senza conflitti; ad esempio, sia schema1 che myschema possono contenere tabelle denominate mytable. A differenza dei database, gli schemi non sono rigidamente separati: un utente può accedere agli oggetti in uno qualsiasi degli schemi nel database a cui è connesso, se ha i privilegi per farlo.

Esistono diversi motivi per cui si potrebbe voler usare gli schemi:

Consentire a molti utenti di utilizzare un database senza interferire tra loro.

Organizzare gli oggetti del database in gruppi logici per renderli più gestibili.

Le applicazioni di terze parti possono essere inserite in schemi separati in modo che non si scontrino con i nomi di altri oggetti.

Gli schemi sono analoghi alle directory a livello di sistema operativo, tranne per il fatto che gli schemi non possono essere nidificati.

La documentazione ufficiale può essere consultata https://www.postgresql.org/docs/9.1/ddl-schemas.html


0

Gli schemi contengono database.

I database fanno parte di uno schema.

Quindi, schemi> database.

Gli schemi contengono viste, stored procedure (s), database (s), trigger (s) ecc.


0

Uno schema non è un piano per l'intero database. È un piano / contenitore per un sottoinsieme di oggetti (es. Tabelle) all'interno di un database.

Questo significa che puoi avere più oggetti (es. Tabelle) all'interno di un database che non rientrano necessariamente nella stessa categoria funzionale. Quindi puoi raggrupparli in vari schemi e dare loro diverse autorizzazioni di accesso dell'utente.

Detto questo, non sono sicuro che tu possa avere una tabella sotto più schemi. L'interfaccia utente di Management Studio fornisce un menu a discesa per assegnare uno schema a una tabella e quindi rendere possibile la scelta di un solo schema. Immagino che se lo fai con TSQL, potrebbe creare 2 (o più) oggetti diversi con ID oggetto diversi.


0

Uno schema di database è un modo per raggruppare logicamente oggetti come tabelle, viste, procedure memorizzate ecc. Pensa a uno schema come un contenitore di oggetti. E le tabelle sono raccolte di righe e colonne. la combinazione di tutte le tabelle crea un db.


1
Quelle prime frasi sono la stessa identica .... stackoverflow.com/a/29042133/2308683
OneCricketeer
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.