2010-09-15 2 views
5

Ist es immer eine bewährte Methode zu verwenden -Ist es immer eine gute Übung, Aliase in SQL-Joins oder verschachtelten Abfragen zu verwenden?

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

statt -

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

Anders als Lesbarkeit und Länge der Abfrage zu reduzieren, was Vorteile der Verwendung von Aliasnamen sind? Wenn ich mit unserem Datenbankexperten konsultierte, sagt er Abfrage kann brechen wenn es keine Aliases zu Zeiten gibt ... die ich nicht vollständig verstehe ... Ich würde mich freuen, wenn jemand ihre Gedanken teilen würde und was die besten Praktiken sind befolgt werden ... Vielen Dank.

Antwort

10
  1. Sie sind wahrscheinlich verwirrend „um eine Tabelle Präfix zu verwenden“ und „benötigen eine ALIAS verwenden“, wenn zu brechen Dinge bezieht.

    Die Abfrage kann nach dem Hinzufügen eines Joins wahrscheinlich eher unterbrochen werden, wenn Sie kein Tabellenpräfix verwenden. Wenn Ihre ursprüngliche Tabelle und eine neu hinzugefügte Tabelle eine Spalte mit demselben Namen teilen. Aus Gründen der zukünftigen Wartung ist die Verwendung eines Tabellenpräfixes eine gute Idee für alle Spalten in der Abfrage.

    Dieses Problem wird jedoch gelöst, indem vor Spalten ein beliebiges Tabellenpräfix verwendet wird, unabhängig davon, ob es sich um einen echten Tabellennamen oder einen Aliasnamen handelt.

  2. Der Alias ​​ist erforderlich (im Gegensatz zu tatsächlichen Tabellenname), wenn Sie die gleiche Tabelle zweimal verwenden.

  3. Aus einer Menge Erfahrung mit der Pflege viel komplexer SQL, muss ich sagen, dass meine Ansicht 100% Gegenteil von Ihnen ist.

    Nämlich die Verwendung eines kurzen - insbesondere 1-Buchstaben - Tabellenalias macht es schwieriger, Code zu lesen/zu pflegen.

    Wenn Sie morgens um 2 Uhr morgens während des Produktionsnotfalles ein langes Stück SQL mit komplexen Verbindungen debuggen, schauen Sie 10-15 Zeilen oben und zurück, um zu sehen, welche Tabelle mit dem Alias ​​"e" übereinstimmt.

    Dieser Punkt hat zwei Ausnahmen

    • , wenn die Geschäftslogik der Abfrage die Tabelle für einen Zweck verwendet, die aus dem Tabellennamen sehr verschieden ist.

    • Wenn der Tabellenname unangemessen lang und unvernünftig aufgrund von Umständen außerhalb Ihrer Kontrolle ist - und dann sollte der Alias ​​immer noch etwas lesbar und logisch sein. Z.B. „EmployeeTableIndexedByUIDSourcedFromHR“ kann und sollte in der Regel Aliase als „Employee“, aber nicht als „E

  4. Auch zu vermeiden allzu lange Saiten, es hilft hreatly, wenn Sie Ihre Fragen formatiert Zeilenumbrüche und Ausrichtung mit:

    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' und 'D' ist nicht so schlimm, in diesem Fall besser als die willkürlichen' a' und 'b' – cjk

+1

@ck - es ist nicht so schlecht für eine Beispielabfrage so einfach wie diese. Als eine Richtlinie ist es schlecht, weil die Abfragen von Leuten gelesen werden, die vielleicht nicht alle der 1000 Tabellennamen auswendig wissen, in einer Abfrage mit 5 Tabellenverbindungen und Dutzenden von Zeilen lang. – DVK

+1

+1 für die meisten Punkte, obwohl (wie ck) Ich denke, kurze Aliase können in einfachen Abfragen gut lesbar sein. Der entscheidende Punkt ist, dass Aliase leicht verständlich sein sollten. –

4

Wenn Sie die gleiche Tabelle zweimal referenzieren, müssen Sie einen Alias ​​verwenden.

Ansonsten gibt es keinen technischen Grund, den ich mir vorstellen kann.

1

Der am besten lesbare Weg ist, mit einem voll qualifizierten Namen explizit zu sein; Darauf sind Ihr DB-Experte und ich einverstanden.

Aber wenn Sie sie entwickeln ... Aliase sind Ihr Freund, Hände nach unten.

0
  1. Erhöht Lesbarkeit
  2. eine Möglichkeit bietet, die gleiche Tabelle auf verschiedene beitreten Joinbedingung
3

Ich mache es fast immer, weil ich die vollständigen Tabellennamen tippen hasse, und wenn Sie don‘ t do it können Sie mit mehrdeutigen Spaltennamen enden. Verwenden Sie einfach nicht sinnlos Aliase wie T1, T2, usw.

0

Ich bevorzuge in den meisten Fällen die vollständig qualifizierten Tabellennamen. Normalerweise verwende ich nur einen Alias-Namen für Tabellen, wenn ein innerer Join zwischen zwei Tabellen in separaten Datenbanken erforderlich ist, nur um es etwas lesbarer zu machen.

Ich würde jedoch die Verwendung von Alias-Namen für Ihre Felder empfehlen, um Änderungen zu verhindern, die für den Downstream-Aufruf von Anwendungen erforderlich sind.

Select Employees.Name as [Name] 
From Employees