Je concevons un système de paie J'ai conçu une base de données avec plusieurs tables et cette question est liée aux tables suivantes.
EMPLOYEE (Employee_ID [pk], Name,... etc)
LOCATION (Location_ID [pk], Name, Address, ...etc)
Ces deux tables ont beaucoup à de nombreuses relations alors qu'un employé peut travailler à plusieurs endroits et dans un lieu de travail, plusieurs employés travaillent.
Ces deux tables sont liées à la table ATTENDANCE
.
ATTENDANCE (Employee_ID, Location_ID, Shift_Type, In, Out)
Type de décalage serait soit "jour" ou "nuit" et "dans"/"Out" Les champs sont DateTime
champs. Le type de décalage est décidé en fonction de la date du champ "In". Par exemple, si le champ In
d'un employé est laisse dire -06/22/2014 07:30:00 PM
Ensuite, le type de décalage est Night
_ et Shift appartient au 22/06/2014. (son Out
time serait 23/06/2014 07:30AM
; c'est le jour suivant)
La condition est que, un employé ne peut pas fonctionner à la même date deux fois, même dans deux endroits. Mais un employé peut travailler une journée dans un lieu et une nuit à un autre endroit.
Mon tableau initial de la sélection principale de la sélection principale était (Employee_ID + In)
Mais c'est faux, car un employé peut travailler le même changement le même si le temps In
est légèrement différent à deux reprises.
Alors maintenant, je sais que la clé primaire devrait être une chose comme (Employee_ID + Shift_Type + Shift_Date)
. Mais le problème est que je n'ai pas de champ de date dans la table de présence. Mais j'ai In
champ qui est un champ DateTime
.
Sautant que ma compréhension de la question est correcte ...,
Ma question est de savoir ajouter un autre champ à la table de présence comme Shift_Date
, est-il possible d'obtenir la partie de date du champ In
, lors de la création d'un PRIMARY KEY
Pour cette table?
Vous pouvez utiliser un champ de date comme clé primaire, mais vous ne pouvez pas saisir une partie d'un champ. Vous devriez faire un champ séparé avec juste la date.
Cette condition particulière n'est pas une chose qui serait normalement appliquée en la construisant dans la clé primaire d'une table de toute façon. Votre "employé ne peut pas fonctionner le même changement de même date deux fois même dans deux endroits" est une règle des affaires, quelque chose qui ne va pas nécessairement être le même pour toujours. (La bonté sait, il y a tout à fait trop d'endroits où les employés font des changements fractionnés ...) Un moyen plus typique de gérer cela serait de générer un champ d'incrémentation automatique pour la clé primaire, puis de faire respecter votre entreprise. Règles quelque part plus près de l'interface utilisateur.