2010-09-15 10 views
5

E 'sempre una buona pratica da usare -È sempre utile utilizzare alias in sql joins o query nidificate?

Select E.Id,D.DeptName from Employee E join Dept D on E.DeptId=D.Id 

invece di -

Select Employee.Id,Dept.DeptName from Employee join Dept on Employee.DeptId=Dept.Id 

Altro che leggibilità e riducendo la lunghezza della query quali sono vantaggi di utilizzare pseudonimi? Quando ho consultato il nostro esperto di database, la query potrebbe interrompersi se ci sono nessun alias a volte ... che non capisco completamente ... Apprezzerei se qualcuno condividesse i loro pensieri e quali fossero le migliori pratiche per essere seguito ... Grazie mille.

risposta

10
  1. Siete probabilmente confusa "la necessità di utilizzare un prefisso tabella" e "la necessità di utilizzare un alias" quando si parla di cose di rottura.

    La query potrebbe infatti essere più probabile che si interrompa dopo l'aggiunta di un join se non si utilizza un prefisso tabella; quando la tabella originale e una tabella appena aggiunta condividono una colonna con lo stesso nome. Quindi, per motivi di manutenzione futura, usare sempre un prefisso tabella è una BUONA idea per tutte le colonne nella query.

    Tuttavia, questo problema viene risolto utilizzando QUALSIASI prefisso tabella davanti alle colonne, sia il nome della tabella reale o il nome alias.

  2. L'alias è necessario (in opposizione al nome effettivo della tabella) quando si utilizza la stessa tabella due volte.

  3. Da un sacco di esperienza con il mantenimento di un sacco di SQL complesso, devo dire che il mio punto di vista è al 100% opposto del tuo.

    In particolare, l'utilizzo di un alias di tabella breve, in particolare di 1 lettera, consente a un HARDER di leggere/gestire il codice.

    Quando si esegue il debug di un lungo pezzo di SQL con articolazioni complesse alle 2:00 del mattino durante l'emergenza di produzione, guardando indietro/avanti 10-15 righe sopra per vedere quale tabella corrisponde alias "e" è MOLTO più difficile.

    Questo punto ha 2 eccezioni

    • quando la logica di business della query utilizza la tabella per uno scopo che è molto diverso dal nome della tabella.

    • quando il nome della tabella è irragionevolmente lungo e irragionevole a causa di circostanze al di fuori del vostro controllo - e quindi l'alias dovrebbe essere ancora leggibile e logico. Per esempio. "EmployeeTableIndexedByUIDSourcedFromHR" possono e di solito dovrebbe essere pseudonimi come "Employee", ma non come "E"

  4. Inoltre, per evitare di avere eccessivamente lunghe stringhe, aiuta hreatly se si formatta le vostre domande utilizzando nuove righe e l'allineamento:

    Select Employee.Id,Dept.DeptName from Employee join Dept on Employee.DeptId=Dept.Id

vs

SELECT Employee.Id 
     ,Dept.DeptName 
FROM Employee 
JOIN Dept 
ON  Employee.DeptId=Dept.Id 
+2

'e' e' D' non sono così male, in questo caso, meglio del arbitraria 'a' e' B' – cjk

+1

@ck - non è poi così male per una query di esempio semplice come questo. Come criterio, è male, perché le query verranno lette da persone che potrebbero non conoscere a memoria tutti i 1000 nomi di tabelle, in una query con 5 join di tabelle e decine di righe. – DVK

+1

+1 per la maggior parte dei punti, anche se (come ck) penso che gli alias brevi possano essere abbastanza leggibili in semplici query. Il punto chiave è che gli alias dovrebbero essere facilmente comprensibili. –

4

Quando si fa riferimento due volte alla stessa tabella, è necessario utilizzare un alias.

A parte questo, non c'è alcuna ragione tecnica a cui possa pensare.

1

Il modo più leggibile è quello di essere espliciti con un nome completo; su questo il tuo esperto di DB e io sono d'accordo.

Ma quando li sviluppi ... gli alias sono tuoi amici, a mani basse.

0
  1. Aumenta la leggibilità
  2. fornisce un modo per unire la stessa tabella a diversa condizione di join
3

ho quasi sempre faccio perché io odio di digitare il nome completo tavolo, e se si don' Per farlo, puoi finire con nomi di colonne ambigue. Basta non usare alias senza senso, come T1, T2, ecc

0

Preferisco utilizzare i nomi di tabella completi nella maggior parte dei casi. Di solito uso solo un nome alias per le tabelle se è richiesto un join interno tra due tabelle in database separati, solo per renderlo un po 'più leggibile.

Select Employee.Name, sales.Amount 
From Employee 
     Inner Join SalesDB.dbo.Sales as Sales On Employee.ID = Sales.EmployeeID 

Tuttavia, si consiglia di utilizzare i nomi alias per i campi al fine di impedire le modifiche necessarie per chiamare le applicazioni a valle.

Select Employees.Name as [Name] 
From Employees