所以我是数据库结构的新手,我正在制作一个应用程序。我想让你们运行这个结构,以确保这是构建数据库的最佳方式。
所以应用程序,基本上是为了几个学习实验。所以基本上,你登录,然后你会看到各种任务,然后你创建一个会话。你需要完成任何其他任务。记录每个试验,当会话结束时(根据试验次数确定,然后应用程序返回菜单。
CREATE TABLE `users` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`username` varchar(255) NOT NULL,
`firstname` varchar(255) NOT NULL,
`lastname` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`password` varchar(60) NOT NULL,
`created_at` timestamp NOT NULL,
`updated_at` timestamp NOT NULL,
`remember_token` varchar(100) NOT NULL,
`status` varchar(100) NOT NULL,
`priviledges` varchar(100) NOT NULL,
`rewards` int(3) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
CREATE TABLE `sessions` (
`id` int(100) NOT NULL AUTO_INCREMENT,
`user_id` int(100) NOT NULL,
`task_type` varchar(255) NOT NULL,
`firstresponse_datetime` timestamp NOT NULL,
`lastresponse_datetime` timestamp NOT NULL,
`max_trials` int(4) NOT NULL,
`current_trial` int(4) NOT NULL,
`status` int(2) NOT NULL,
`wasted_stimuli` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
CREATE TABLE `trials` (
`id` int(255) NOT NULL AUTO_INCREMENT,
`session_id` int(255) NOT NULL,
`transfer` tinyint(1) NOT NULL,
`sd` varchar(255) NOT NULL,
`sample` varchar(255) NOT NULL,
`comparisons` varchar(255) NOT NULL,
`response` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
所以这就是事情。我担心应用程序会立即依赖太多表。就像,一般的应用程序是,页面被呈现,发出请求并且数据被输入到数据库中。显示试验之间的页面,然后将用户重定向到新的试用页面。因此,在10-15秒内,使用将进行大约2次试验。
我担心的是服务器是一个网络服务器,这将是一个PHP脚本的一部分。试验将是INSERT,会话将更新,用户可能会被令牌更新。但令牌可能是会话表的一部分。仅将UPDATE从2减少到1表,只有1个插入。
我也关注wasted_stimuli行。这基本上是一个数组,每次试验都会更新和扩展。在每次试验开始时都要检查。所以我要么从会话中检索wasted_stimuli数组,要么根据用户执行SELECT sd WHERE JOIN SESSIONS AND TRIALS BY ID到session_id。然后将sd放在一个数组中。
我不确定这是什么最好的标准。
谢谢!任何其他可能使其更好的事情都会有兴趣了解。
如果您有任何问题,请告诉我
答案 0 :(得分:1)
CREATE TABLE `users` (
`id` int NOT NULL AUTO_INCREMENT, -- display widths don't move me
`username` varchar(255) NOT NULL,
`firstname` varchar(255) NOT NULL,
`lastname` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`password` varchar(60) NOT NULL, -- you need to think about this, I will provide a link
`created_at` timestamp NOT NULL, -- or datetime. I use them
`updated_at` timestamp NOT NULL,
`remember_token` varchar(100) NOT NULL,
`status` varchar(100) NOT NULL,
`privileges` varchar(100) NOT NULL, -- spelling
`rewards` int NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
CREATE TABLE `sessions` (
`id` int NOT NULL AUTO_INCREMENT,
`user_id` int NOT NULL,
`task_type` varchar(255) NOT NULL,
`firstresponse_datetime` timestamp NOT NULL,
`lastresponse_datetime` timestamp NOT NULL,
`max_trials` int NOT NULL,
`current_trial` int NOT NULL, -- my guess is that these need to be added as FK's
`status` int NOT NULL,
`wasted_stimuli` text NOT NULL,
PRIMARY KEY (`id`),
CONSTRAINT fk_user_to_parent FOREIGN KEY (user_id) REFERENCES users(id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
CREATE TABLE `trials` (
`id` int NOT NULL AUTO_INCREMENT,
`session_id` int NOT NULL, -- my guess is that these need to be added as FK's
`transfer` tinyint(1) NOT NULL,
`sd` varchar(255) NOT NULL,
`sample` varchar(255) NOT NULL,
`comparisons` varchar(255) NOT NULL,
`response` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Mysql Using FOREIGN KEY Constraints
如架构中所述,passwords issues。最底层提出的架构。并链接了。