2011-11-28 13 views
7

ho tavolo Widget e tavolo PersoneSqlServer identità convenzione di denominazione

entrambi contiene colonna Identity (seme)

qual è la convenzione di denominazione consigliato per la colonna di identità?

è it "id" (per entrambe le tabelle):

Widgets.Id 
Persons.Id 

o

Widgets.WidgetId 
Persons.PersonId 

C'è vantaggi/svantaggi nel primo confronto a quest'ultimo?

+2

Questo è stato chiesto prima su [Programmers SE] (http://programmers.stackexchange.com/questions/114728/why-is-naming-a-tables-primary-key-column-id-considered-bad- pratica), purtroppo non posso inviarlo lì. È troppo ampio per Stack Overflow. –

+0

@TimPost Ciao, ancora non capisco perché l'hai chiuso .... ho appena fatto una domanda perché avevo un dilemma ... non ho mai voluto iniziare un dibattito ... –

+0

@RoyiNamir non è mai stato un dibattito. Ecco come funziona la rete Stack Exchange. Stai bene. – jcolebrand

risposta

6

Questo è un caso in cui mi piacerebbe andare per la ridondanza e ho Thing.ThingID
altrimenti bisogna alias esso ovunque quando si uniscono

Nota: questo è stato già fatto per morte e oltre on programmers.se:
Why is naming a table's Primary Key column “Id” considered bad practice?

+0

Sono sempre alias dei miei tavoli quando mi unisco a loro quindi non vedo questo come un inconveniente. – Icarus

+0

@Icarus: aliasing * colonne * quindi non hai Id due volte in un set di risultati – gbn

+0

@gbn quando dici "alias", intendi nell'istruzione select? –

3

La procedura consigliata consiste nell'introdurre il nome della tabella.

Questo renderà molto più chiaro quando si unisce a quale campo si fa riferimento nell'elenco SELECT.

E 'anche accidentali cattive condizioni JOIN impossibile, vale a dire

JOIN TableA ON ID = TableA.ID

Come regola generale, i nomi di campo duplicati attraverso le tabelle dovrebbero essere evitate a meno che non rappresentano dati identici.

+0

L'accidentale argomento di join è un ottimo punto. Sono sempre alias nei miei tavoli quando mi iscrivo, ma c'è sicuramente questa possibilità. – Icarus

3

Utilizzando il nome della tabella nella colonna di identità è un po 'ridondante, ma trovo che sia utile e più descrittivo in particolare durante l'esecuzione di chiave esterna si unisce. Per esempio, che sembra meglio:

SELECT P.PersonID, P.FullName, W.WidgetID, W.WidgetName 
FROM Widgets W JOIN 
    PersonWidgets PW ON W.WidgetsID = PW.WidgetsID JOIN 
    Person P ON P.PersonID = PW.PersonID 

O

SELECT P.ID as PersonID, P.FullName, W.ID as WidgetID, W.WidgetName 
FROM Widgets W JOIN 
    PersonWidgets PW ON W.ID = PW.WidgetsID JOIN 
    Person P ON P.ID = PW.PersonID 

La prima query è più esplicito e porta a join meno accidentale. Elimina inoltre la necessità di utilizzare alias nell'elenco SELECT.

Problemi correlati