Waarom beginnen tabelnamen in SQL Server met “dbo”?

Tenminste op mijn lokale instantie, wanneer ik tabellen maak, worden ze allemaal voorafgegaan door “dbo.”. Waarom is dat?


Antwoord 1, autoriteit 100%

dbo is het standaardschema in SQL Server. U kunt uw eigen schema’s maken zodat u uw objectnaamruimte beter kunt beheren.


Antwoord 2, autoriteit 35%

Als u Sql Server Management Studio gebruikt, kunt u uw eigen schema maken door naar Databases – Uw database – Beveiliging – Schema’s te bladeren.

Een script maken met een script is net zo eenvoudig als (bijvoorbeeld):

CREATE SCHEMA [EnterSchemaNameHere] AUTHORIZATION [dbo]

U kunt ze gebruiken om uw tabellen logisch te groeperen, bijvoorbeeld door een schema te maken voor ‘Financiële’ informatie en een ander voor ‘Persoonlijke’ gegevens. Uw tabellen worden dan weergegeven als:

Financiële.Bankrekeningen
Financiële transacties
Persoonlijk.Adres

In plaats van het standaardschema van dbo te gebruiken.


Antwoord 3, autoriteit 9%

Het is nieuw voor SQL 2005 en biedt een vereenvoudigde manier om objecten te groeperen, vooral om de objecten in die “groep” te beveiligen.

De volgende link biedt een meer diepgaande uitleg over wat het is, waarom we het zouden gebruiken:

Het verschil begrijpen tussen eigenaren en schema’s in SQL Server


Antwoord 4, autoriteit 4%

Microsoft introduceerde schemain versie 2008. Voor degenen die het schema niet kenden, en degenen die het niet konden schelen, werden objecten in een standaardschema geplaatst dbo.

dbostaat voor DataBase Owner, maar dat is niet echt belangrijk.

Beschouw een schema als een map voor bestanden:

  • U hoeft niet naar het schema te verwijzen als het object zich in hetzelfde of standaardschema bevindt
  • Je kunt verwijzen naar een object in een ander schema door het schema als voorvoegsel te gebruiken, zoals je kunt verwijzen naar een bestand in een andere map.
  • Je kunt niet twee objecten met dezelfde naam in één schema hebben, maar wel in een ander schema
  • Het gebruik van een schema kan u helpen een groter aantal objecten te ordenen
  • Schema kan ook worden toegewezen aan bepaalde gebruikers en rollen, zodat u kunt bepalen wie wat kan doen.

Je hebt altijd toegang tot elk object vanuit elk schema.

Omdat dbode standaard is, hoeft u dit normaal gesproken niet op te geven binnen een enkele database:

SELECT * FROM customers;
SELECT * FROM dbo.customers;

hetzelfde bedoelen.

Ik ben geneigd het niet eens te zijn met het idee om altijd het voorvoegsel dbo.te gebruiken, want hoe meer je je code vol onnodige details geeft, hoe moeilijker het is om te lezen en te beheren.

Je kunt het schema grotendeels negeren. Het schema wordt echter duidelijk in de volgende situaties:

  1. Als u de tabellen bekijkt in de object-navigator of in een externe toepassing, zoals Microsoft Excel of Access, ziet u het voorvoegsel dbo.. Je kunt het nog steeds negeren.

  2. Als u naar een tabel in een andere database verwijst, heeft u de volledige naam nodig in de vorm database.schema.table:

    SELECT * FROM bookshop.dbo.customers;
    
  3. Als u om historische redenen een door de gebruiker gedefinieerde scalaire functie schrijft, moet u deze aanroepen met het schemavoorvoegsel:

    CREATE FUNCTION tax(@amount DECIMAL(6,2) RETURNS DECIMAL(6,2) AS
    BEGIN
        RETURN @amount * 0.1;
    END;
    GO
    SELECT total, dbo.tax(total) FROM pricelist;
    

    Dit geldt niet voor andere objecten, zoals tabelfuncties, procedures en views.

U kunt een schema gebruiken om naamgevingsconflicten op te lossen. Als elke gebruiker bijvoorbeeld een persoonlijk schema heeft, kunnen ze extra objecten maken zonder met andere gebruikers over de naam te hoeven vechten.

Other episodes