Capisco la sensazione che una colonna chiamata EventDate
in una tabella chiamata Events
(che, tra tutte le convenzioni DB che io abbia mai imparato, dovrebbe essere chiamato Evento ...;)) è ridondante, ma prendere in considerazione:
si dispone di un tavolo Event
con una colonna Date
e un tavolo Booking
, il cui record rappresentano un cliente di prenotare un posto ad un evento, anche con una colonna Date
(che, in questo contesto, fa riferimento alla data che la sede è stato prenotato):
SELECT e.Date AS EventDate, b.Date AS BookingDate, [...]
FROM Event e
JOIN Booking b ON b.EventId = e.Id
dover rendere conto per i nomi di colonna ambigui in ogni tale interrogazione è una pena che può (e fa, a mio parere) superare la presunta ridondanza dei Event.EventDate
.
Consideriamo un altro argomento che possiamo applicare ai nomi delle colonne ID in ogni tabella: chiamando il PK in Event
EventId
invece di limitarsi a Id
ci permette di scrivere questo ENTRA criterio:
JOIN Booking b ON b.EventId = e.EventId
cui possiamo vedere a colpo d'occhio fa riferimento alle colonne corrette.
In sintesi, se dobbiamo prendere la decisione tra chiamare la colonna Date
o EventDate
, quest'ultimo ha molti vantaggi:
- Come @Benjamin Seiller sottolinea, una colonna dovrebbe identificare significato della colonna, non necessariamente il suo tipo di dati
- Inoltre, cosa succede quando si dispone di una tabella con tre campi di date differenti che rappresentano le date rilevanti per l'entità? Se non li si fa un nome in base al loro significato , adesso si deve ricordare quale campo significa ciò ...
- Non appena vogliamo interrogare più tabelle, i nomi di colonna ambigui problemi presenti
- Se le colonne che appaiono in più tabelle (come chiavi esterne) hanno nomi espliciti e identici, la nostra sintassi di query diventa un po 'più resistente agli insetti (come l'adesione sulla colonna sbagliata)
prendere in considerazione tutte le situazioni in cui il vostro tavolo può essere usato al momento di decidere i nomi delle colonne. In questo caso, sosterrò che i vantaggi di fornire informazioni specifiche del contesto nel nome della colonna superano di gran lunga la ridondanza della ripetizione del nome della tabella.
fonte
2011-02-02 20:44:10
"Verdasco VS Monfils" è una partita di tennis in arrivo. Stavo per nominare l'intero tavolo * Eventi *. Tutte le colonne devono essere considerate come correlate al nome della tabella, quindi la duplicazione del nome della tabella nel nome della colonna è davvero la strada da percorrere? – JoJo
Beh, non vedo alcun problema con quello in generale. Ma se dai il nome alla tua tabella 'events', puoi dare un nome alla colonna' starttime'. 'SELECT starttime FROM events 'avrebbe assolutamente senso allora. – alexn
Vado con * startTime *. – JoJo