Kom ihåg mig?
Home Menu

Menu


Databasupplägg för stämpelkort

Ämnesverktyg Visningsalternativ
Oläst 2016-09-20, 12:21 #1
naak2803 naak2803 är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2011
Inlägg: 767
naak2803 naak2803 är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2011
Inlägg: 767
Question Databasupplägg för stämpelkort

Hej,

ska utveckla en mycket simple "stämpelkort", dvs tiden och datumet ska loggas vid incheckning och utcheckning...

vilket är det mest optimala sättet att lägga upp databasen på?

Såhär hade jag tänkt mig,

[UserId], [TimeForCheckIn], [TimeForCheckOut]

men det kändes inte riktigt rätt, eftersom jag hela tiden måste kontrollera ifall användaren har checkat in eller inte... och undder tiden användaren endast har checkat in så är ju [TimeForCheckOut] tomt.
naak2803 är inte uppkopplad   Svara med citatSvara med citat
Oläst 2016-09-20, 12:40 #2
SvanteH SvanteH är inte uppkopplad
Medlem
 
Reg.datum: Jan 2015
Inlägg: 118
SvanteH SvanteH är inte uppkopplad
Medlem
 
Reg.datum: Jan 2015
Inlägg: 118
Citat:
Ursprungligen postat av naak2803 Visa inlägg
Hej,

ska utveckla en mycket simple "stämpelkort", dvs tiden och datumet ska loggas vid incheckning och utcheckning...

vilket är det mest optimala sättet att lägga upp databasen på?

Såhär hade jag tänkt mig,

[UserId], [TimeForCheckIn], [TimeForCheckOut]

men det kändes inte riktigt rätt, eftersom jag hela tiden måste kontrollera ifall användaren har checkat in eller inte... och undder tiden användaren endast har checkat in så är ju [TimeForCheckOut] tomt.
[UserId], [Time], [Type]

Så kan du ha type = 1 för incheckning, 2 för utcheckning och du kan också lägga till fler typer för vilken typ av utcheckning osv. Annars så kommer ditt förslag fungera rätt bra.
SvanteH är inte uppkopplad   Svara med citatSvara med citat
Oläst 2016-09-20, 12:42 #3
naak2803 naak2803 är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2011
Inlägg: 767
naak2803 naak2803 är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2011
Inlägg: 767
Citat:
Ursprungligen postat av SvanteH Visa inlägg
[UserId], [Time], [Type]

Så kan du ha type = 1 för incheckning, 2 för utcheckning och du kan också lägga till fler typer för vilken typ av utcheckning osv. Annars så kommer ditt förslag fungera rätt bra.
tack men på ditt sätt hamnar jag i samma sits... två jag måste göra två kontrollerer, en kontrollen för att se ifall senaste "type" är incheckat så ska den nu checka ut.
naak2803 är inte uppkopplad   Svara med citatSvara med citat
Oläst 2016-09-20, 15:07 #4
digiArt digiArt är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jan 2004
Inlägg: 1 429
digiArt digiArt är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jan 2004
Inlägg: 1 429
Det finns många sätt att lösa det där på, jag hade nog gjort liknande som SvanteH.

Börja med en kravlista hur det ska fungera (use cases), utifrån dem kan du sen skapa upp affärslogik och datalager.

Varför skriver jag det? Jo: du anger villkor i ditt svar till SvanteH, och om du inte har detaljerat affärsreglerna kan du inte heller få bra svar på din undring.
digiArt är inte uppkopplad   Svara med citatSvara med citat
Oläst 2016-09-20, 15:26 #5
SvanteH SvanteH är inte uppkopplad
Medlem
 
Reg.datum: Jan 2015
Inlägg: 118
SvanteH SvanteH är inte uppkopplad
Medlem
 
Reg.datum: Jan 2015
Inlägg: 118
Citat:
Ursprungligen postat av naak2803 Visa inlägg
tack men på ditt sätt hamnar jag i samma sits... två jag måste göra två kontrollerer, en kontrollen för att se ifall senaste "type" är incheckat så ska den nu checka ut.
Vad är det för problem med det? Det är en liten tabell med definerad nyckel, uppslag är billigt?
SvanteH är inte uppkopplad   Svara med citatSvara med citat
Oläst 2016-09-20, 15:45 #6
nim nim är inte uppkopplad
Medlem
 
Reg.datum: Oct 2014
Inlägg: 248
nim nim är inte uppkopplad
Medlem
 
Reg.datum: Oct 2014
Inlägg: 248
Ett snabbt exempel på en vy i MySQL för att se in och utstämplingar.

Där den matchar senaste instämplingen och närmaste utstämpling
Kod:
CREATE ALGORITHM=UNDEFINED DEFINER=`reed`@`localhost` SQL SECURITY DEFINER VIEW `stamps`
AS SELECT
   `A`.`id` AS `aid`,
   `B`.`id` AS `bid`,
   `A`.`terminalid` AS `aterminalid`,
   cast(`A`.`date` as date) AS `adate`,
   cast(`A`.`date` as time) AS `atime`,
   dayname(`A`.`date`) AS `aday`,
   `A`.`date` AS `adatetime`,
   `B`.`terminalid` AS `bterminalid`,
   cast(`B`.`date` as date) AS `bdate`,
   cast(`B`.`date` as time) AS `btime`,
   dayname(`B`.`date`) AS `bday`,
   `B`.`date` AS `bdatetime`,timestampdiff(HOUR,`A`.`date`,
   `B`.`date`) AS `timedifference`,
   `A`.`type` AS `atype`,
   `B`.`type` AS `btype`,
   `A`.`employee_no` AS `employee_no`,
   `A`.`cardtype` AS `acardtype`,
   if((substr(`A`.`cardno`,1,3) = '000'),substr(`A`.`cardno`,2),`A`.`cardno`) AS `acardno`, `B`.`cardtype` AS `bcardtype`,
   if((substr(`B`.`cardno`,1,3) = '000'),substr(`B`.`cardno`,2),`B`.`cardno`) AS `bcardno`, `A`.`firstname` AS `firstname`,
   `A`.`lastname` AS `lastname`,
   `A`.`role` AS `role`,
   `A`.`competence` AS `competence`
FROM `tt_stamps` `A`
JOIN `tt_stamps` `B` on `B`.`terminalid` = `A`.`terminalid` and `B`.`cardno` = `A`.`cardno and cast `A`.`date` as date = cast(`B`.`date` as date
WHERE 
   `A`.`cardtype` = 'TAGID' AND
   timestampdiff(HOUR,`A`.`date`,`B`.`date`) > 0 AND
   `A`.`type` = 'IN' AND
   `B`.`type` = 'OUT'
ORDER BY cast(`A`.`date` as date);
i följande struktur:
Kod:
CREATE TABLE `tt_stamps` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `terminalid` varchar(255) COLLATE utf8_swedish_ci DEFAULT NULL,
  `type` enum('IN','OUT') COLLATE utf8_swedish_ci DEFAULT NULL,
  `cardno` varchar(50) COLLATE utf8_swedish_ci DEFAULT NULL,
  `cardtype` varchar(50) COLLATE utf8_swedish_ci DEFAULT NULL,
  `date` datetime DEFAULT NULL,
  `location` varchar(255) COLLATE utf8_swedish_ci DEFAULT NULL,
  `username` varchar(255) COLLATE utf8_swedish_ci DEFAULT NULL,
  `employee_no` varchar(255) COLLATE utf8_swedish_ci DEFAULT NULL,
  `firstname` varchar(255) COLLATE utf8_swedish_ci DEFAULT NULL,
  `lastname` varchar(255) COLLATE utf8_swedish_ci DEFAULT NULL,
  `role` varchar(255) COLLATE utf8_swedish_ci DEFAULT NULL,
  `competence` varchar(255) COLLATE utf8_swedish_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `terminalid` (`terminalid`,`cardno`),
  KEY `date` (`date`)
) ENGINE=InnoDB AUTO_INCREMENT=4511652 DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci;

Senast redigerad av nim den 2016-09-20 klockan 15:48
nim är inte uppkopplad   Svara med citatSvara med citat
Oläst 2016-09-21, 13:56 #7
webtigerteam webtigerteam är inte uppkopplad
Nykomling
 
Reg.datum: Aug 2016
Inlägg: 30
webtigerteam webtigerteam är inte uppkopplad
Nykomling
 
Reg.datum: Aug 2016
Inlägg: 30
Citat:
Ursprungligen postat av SvanteH Visa inlägg
Vad är det för problem med det? Det är en liten tabell med definerad nyckel, uppslag är billigt?
Jag håller med SvanteH, känns lite som att du lägger ner onödig tid på att ta fram den optimala relations-tabellen, i stället för att göra klart programmet. Det är inte ofta man vet exakt vad man behöver i första implementationen.
webtigerteam är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 20:50.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017