E 'cattive pratiche di codifica di avere una tabella SQL che contiene una colonna con lo stesso nome?

StackOverflow https://stackoverflow.com/questions/865265

Domanda

Esempio:

CREATE TABLE ErrorNumber
(
     ErrorNumber int,
     ErrorText varchar(255),
)

Questo può portare ad interrogazioni che somigliano a:

SELECT ErrorNumber FROM ErrorNumber WHERE ErrorNumber=10
È stato utile?

Soluzione

sto supponendo che ErrorNumber come una colonna della tabella è una chiave primaria? In questo caso si potrebbe denominare l'ErrorNumberID colonna della tabella.

Non so questo proposito che è una pratica povero di codifica, ma non riesco a immaginare che sta facendo nulla per migliorare la leggibilità. L'esempio che hai fornito è grande a mostrare come confondere le query possono finire per essere.

L'altra cosa che non sono sicuro è se questo (i nomi delle colonne che è lo stesso nomi delle tabelle) causerebbe un errore? Sono sicuro che varia da fornitore a fornitore.

Altri suggerimenti

CREATE TABLE Errors (
    Number int,
    Description varchar(255)
)

Mi sento quanto sopra è uno schema di denominazione migliore perché:

  • Il nome della tabella rappresenta oggi quello che è.
  • Le colonne non hanno bisogno della parola "Errore" in loro a causa della tavola cui si trovano.

Si potrebbe attaccare per difetto e un nome al chiavi primarie id.

Non credo che sia una buona idea avere una colonna che condividono lo stesso nome con il suo tavolo. E 'di confusione, anche se funziona. Provare per rinominare vostro tavolo per errore o la colonna a ERRORNUM o anche solo Num

Sì, lo è. La stragrande maggioranza delle semplici tabelle in modelli di dati semplici dovrebbero essere sostantivi plurali. Nel tuo esempio, la tabella dovrebbe essere chiamato "errori", con due colonne, "id" e "descrizione".

Sono d'accordo con DWC, e che avrebbe preso un ulteriore passo avanti nel nominare la tabella di qualcosa di un po 'più descrittivo, come in che tipo di tabella di errore si tratta. Se viene utilizzata per memorizzare gli errori che si intende utilizzare nel codice è una cosa, e se la sua una tabella che registra gli errori è un altro. Non sei sicuro di quello che si sta utilizzando per, quindi è davvero a te per citarne qualcosa che abbia un senso al contesto viene utilizzato per. Quando vedo una tabella denominata "errori" non sono sicuro se una tabella di log, o una tabella di ricerca utilizzato per trovare i codici di errore. Se è quest'ultimo che forse qualcosa di simile ErrorCodes sarebbe un buon nome.

CREATE TABLE ErrorCodes
(
Id int,
Number int,
Description varchar(255)
)

E 'poveri? Forse un po 'ma è niente di grave.

Sono d'accordo che è niente di grave.

Abbiamo SKADS di tabelle in un'applicazione che hanno solo ed id e un campo "nome". Sono utilizzati per la discesa.

Così li ho impostato in questo modo:

Il nome della lista è: Stato

Il nome della tabella è: Stato

L'ID è: StateID

La colonna Valore stato attuale è: StateName

Si lavora per noi.

Nel vostro caso specifico, lo farei come suggerito in precedenza e solo il nome Errore tavolo.

Se uno qualsiasi fornitore di database si confonde con questo, utilizzare un altro fornitore di database. Qualsiasi database dovrebbe facilmente analizzare che senza problemi.

Sono d'accordo probabilmente non è buona pratica per motivi di leggibilità.

E 'una questione di forma. Personalmente, faccio la maggior parte dei nomi di tabella plurale, allora non sarebbe mai accaduto. In questo caso particolare, la mia tabella sarebbe ErrorNumbers e il campo della tabella sarebbe ErrorNumber (in realtà vorrei usare ErrorNumberID)

Anche in questo caso, però, il suo fino a voi o ai vostri società di codifica standard. Se si tratta di cattiva forma, è una violazione estremamente minore. Se non altro, la sua l'ID manca il nome della variabile che è più di una violazione.

Se una tabella si prevede di comprendere più di una riga, allora la mia preferenza è quella di utilizzare un termine collettivo come un nome. Nota questo non è lo stesso Takin singolare e aggiungendo una 's' esempio Preferirei 'personale' e 'libro paga' oltre, rispettivamente, 'dipendenti' e 'EmployeesSalaries. E un nome come 'Entitys' dovrebbe essere presa fuori e colpo:)

Alla luce di questo, e considerando le colonne nella progettazione, vorrei citare la tabella in questione 'errori'. Ora, so che molti programmatori preferiscono termini singolari per i nomi di tabella, ma questo è solo uno stile diverso, piuttosto che 'la pratica di codifica poveri'.

Ci sono esigenze occasionali per le tabelle ad una corona per esempio una tabella 'Costanti' contenente il ravvicinamento comune di pi a essere utilizzato dalle applicazioni che utilizzano DBMS ... ma poi la tabella 'Costanti' ho in mente ha più colonne ciascuno per una diversa costante così diventa un termine collettivo come un nome .

Forse, se le applicazioni sempre e solo usato una costante allora forse si potrebbe finire con una tabella denominata 'Pi'? Bene, un altro scelta di stile che ho fatto è quello di utilizzare UpperCamelCase per i nomi di tabella e lower_case_separated_by_underscores per i nomi delle colonne. Pertanto, ancora in grado di distinguere (quasi) la tabella dalla colonna cioè

SELECT pi FROM Pi;

[E un codice parser come quella qui su SO rende il lavoro più facile troppo!]

In realtà, io tendo a usare i nomi di tabella di correlazione quasi esclusivamente in modo sarei più probabile a scrivere:

SELECT P1.pi 
  FROM Pi AS P1;

Considera anche che alcuni termini collettivi siano state digitate lo stesso del termine singolare esempio 'specie', 'cervi', 'pecora', 'pesce' e, probabilmente, molti altri non appartenenti al regno animale ma sto avendo un blocco mentale solo ora:)

Così mentre posso prevedere una tabella SQL che contiene una colonna con lo stesso nome, anche con la convenzione preferito dato denominazione, sarebbe un evento raro.

+1 per i nomi di succint dwc.

Il problema con "un nome di colonna dovrebbe significare un dominio di valori" è che si affaccia contesto. A nome della colonna esiste solo , nel contesto di una tabella. Non è mai ambiguo. Il suo dominio è controllata in modo indipendente del suo nome.

La persona esiste, che non può distinguere tra Errors.Description e Parts.Description e Problems.Description, o chi potrebbe pensare che tutte le colonne nome Description o Name sono tratte dallo stesso pozzo sacro?

Detto questo, io non uso termini generici come Numero o ID per le colonne chiave primaria, per un motivo molto diverso: la colonna ha bisogno di un nuovo nome in cui appare come una chiave esterna.

numeri di errore Supponiamo che dovevano essere registrati, per esempio, la tabella Actions. Actions.Number non può assolutamente fare riferimento a un numero di errore, quindi siamo costretti a inventare qualcosa di simile Actions.ErrorNumber. Se è intenzione di essere ErrorNumber ovunque, potrebbe anche avere lo stesso nome, dove serve come la chiave!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top