배경 : 행동 실험에서 범블 비브는 고유 한 식별자로 태그가 지정되어 이동을 추적합니다. 문제는 태그가 2 자릿수 인 반면 식민지는 500 명의 개인이 될 수 있다는 것입니다. 이로 인해 기본 키를 생성하는 것이 어려워집니다.INSERT 및 SELECT 쿼리를 결합하여 고유 한 ID를 생성하십시오.
테이블
(1). 각 선택 항목은 다음 표에 기록됩니다.
CREATE TABLE `exp8` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`bee_id` varchar(255) DEFAULT NULL,
`date_time` datetime DEFAULT NULL,
`choice` varchar(255) DEFAULT NULL,
`hover_duration` int(11) DEFAULT NULL,
`antennate_duration` int(11) DEFAULT NULL,
`land_duration` int(11) DEFAULT NULL,
`landing_position` varchar(255) DEFAULT NULL,
`remarks` longtext,
`validity` int(11) DEFAULT '1',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=264;
LOCK TABLES `exp8` WRITE;
/*!40000 ALTER TABLE `exp8` DISABLE KEYS */;
INSERT INTO `exp8` (`id`, `bee_id`, `date_time`, `choice`, `hover_duration`, `antennate_duration`, `land_duration`, `landing_position`, `remarks`, `validity`)
VALUES
(1,NULL,'2013-05-14 15:38:31','right',1,0,0,NULL,NULL,1),
(2,NULL,'2013-05-18 10:27:15','left',1,0,0,NULL,NULL,1),
(3,'G5','2013-05-18 11:44:44','left',0,0,4,'yellow',NULL,1),
(4,'G5','2013-06-01 10:00:00','left',0,0,4,'yellow',NULL,1);
(2) 태그의 시작일과 종료일은
CREATE TABLE `tags` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`bee_id` varchar(255) DEFAULT NULL,
`tag_date` date DEFAULT NULL,
`colony_id` int(11) DEFAULT NULL,
`events` varchar(255) DEFAULT NULL,
`worker_age` varchar(255) DEFAULT NULL,
`tagged_by` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=406;
LOCK TABLES `tags` WRITE;
/*!40000 ALTER TABLE `tags` DISABLE KEYS */;
INSERT INTO `tags` (`id`, `bee_id`, `tag_date`, `colony_id`, `events`, `worker_age`, `tagged_by`)
VALUES
(1,'G5','2013-05-08',1,'birth','Adult','ET'),
(2,'G5','2013-05-20',NULL,'death','Adult','ET'),
(3,'G5','2013-05-29',1,'birth','Adult','ET');
(3)입니다. 태그의 여러 용도를 구별하는 쿼리 :
select t.bee_id,
(case when t.death_date is null then 'Alive' else 'Dead' end) as status,
t.tag_date,
t.death_date,
(case when t.death_date is not null then timediff(t.death_date,t.tag_date)
else timediff(NOW(),t.tag_date) end) as age
from (select t.*,
(select t2.tag_date
from tags t2
where t2.bee_id = t.bee_id and
t2.events = 'death' and
t2.tag_date >= t.tag_date
limit 1
) as death_date
from tags t
where t.events = 'birth'
) t
group by t.bee_id, t.tag_date;
이 데이터를 기반으로 기본 키를 생성하는 데 유용한 정보가 있습니까?
미리 감사드립니다. Levi
무엇을위한 기본 키? 각 벌? –
예 각 꿀벌의 기본 키. 동일한 태그를 사용하는 꿀벌을 구분합니다. – Levi
나는 단순화시킬 수도 있지만, 'bee_id'가 2 자리 태그 코드 인 경우, 'tag_date'는 당신이 벌에 태그를 넣은 날짜이고, 같은 날에 태그를 재사용하지 않는다고 가정하면, '(bee_id, tag_date)'와 같은 2 컬럼 기본 키가 후보가 될 것입니다 ... 그 코드는 2 바이트이고 날짜는 3 바이트가됩니다. 그리고 당신은 5 바이트 기본 키를 가지고 있습니다 ... 꽤 합리적인 것 같습니다. 열쇠를 "생성"하지 말고, 가지고있는 자연 열쇠 만 "사용"하십시오. –