Quando si decide una chiave primaria, è possibile utilizzare la parte Data di un campo DateTime

2

Sto progettando un sistema di gestione stipendi Ho progettato un database con diverse tabelle e questa domanda è correlata alle seguenti tabelle

EMPLOYEE (Employee_ID [pk], Name,... etc) LOCATION (Location_ID [pk], Name, Address, ...etc)

Queste due tabelle hanno molte o molte relazioni in quanto un dipendente può lavorare in diversi luoghi e in una posizione, diversi dipendenti stanno lavorando.

Queste due tabelle sono correlate attraverso la tabella ATTENDANCE .

ATTENDANCE (Employee_ID, Location_ID, Shift_Type, In, Out)

Il tipo di spostamento potrebbe essere "Giorno" o "Notte" e "In" / "Fuori" i campi sono campi DateTime . Il tipo di turno viene deciso in base alla data nel campo "In". Ad esempio, se il campo In di un dipendente è detto - 06/22/2014 07:30:00 PM , il tipo di turno è Night e il turno appartiene al 22/06/2014. (il suo Out tempo sarebbe 23/06/2014 07:30AM , cioè il giorno successivo)

LA CONDIZIONE è che, un Dipendente non può lavorare lo stesso turno nella stessa data due volte anche in due posizioni. Ma un dipendente può lavorare Giorno in un luogo e Notte in un'altra posizione.

La mia tabella iniziale di selezione della chiave primaria era (Employee_ID + In) ma ciò non è corretto in quanto un dipendente può eseguire lo stesso turno nello stesso giorno se il In è leggermente diverso in due occasioni.

Quindi ora so che la chiave primaria dovrebbe essere qualcosa come (Employee_ID + Shift_Type + Shift_Date) . Ma il problema è che non ho un campo Data nella tabella PRESENDANCE. Ma ho In campo che è un campo DateTime .

Saltando che la mia comprensione del problema sia corretta ...,

La mia domanda è, senza aggiungere un altro campo alla tabella PRESENDANCE come Shift_Date , c'è la possibilità di ottenere la parte Date del campo In , quando si crea un PRIMARY KEY per questa tabella?

    
posta CAD 22.06.2014 - 21:11
fonte

1 risposta

6

È possibile utilizzare un campo data come chiave primaria, ma non è possibile digitare PART di un campo. Dovresti creare un campo separato con solo la data.

Questa particolare condizione non è qualcosa che normalmente sarebbe applicata costruendo comunque nella chiave primaria di un tavolo. Il tuo "Dipendente non può lavorare nello stesso turno due volte anche in due posizioni" è una regola aziendale , qualcosa che non sarà necessariamente lo stesso per sempre. (Chissà, ci sono troppi posti là fuori che fanno i loro dipendenti fare turni di divisione ...) Un modo più tipico per gestire questo sarebbe solo generare un campo di auto-incremento per la chiave primaria, e quindi rafforzare la tua azienda regole da qualche parte più vicine all'interfaccia utente.

    
risposta data 22.06.2014 - 21:25
fonte