Php 创建坚实的基本数据库结构

Php 创建坚实的基本数据库结构,php,mysql,laravel,database-design,Php,Mysql,Laravel,Database Design,所以我对数据库结构不熟悉,目前正在制作一个应用程序。我想让你们运行这个结构,以确保这是构建数据库的最佳方式 所以这个应用程序,基本上是为了学习一些实验。因此,基本上,您登录后会看到各种任务,然后创建一个会话。你需要完成的其他任务。每次试用都会被记录下来,当会话结束时(由试用次数决定),应用程序会将您返回到菜单 CREATE TABLE `users` ( `id` int(10) NOT NULL AUTO_INCREMENT, `username` varchar(255) NOT N

所以我对数据库结构不熟悉,目前正在制作一个应用程序。我想让你们运行这个结构,以确保这是构建数据库的最佳方式

所以这个应用程序,基本上是为了学习一些实验。因此,基本上,您登录后会看到各种任务,然后创建一个会话。你需要完成的其他任务。每次试用都会被记录下来,当会话结束时(由试用次数决定),应用程序会将您返回到菜单

  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
事情是这样的。我担心这个应用程序一次依赖太多的表。就像,一般的应用程序一样,一个页面被呈现,一个post请求被发出,数据被输入到数据库中。在两次试验之间呈现一个页面,然后用户被重定向到一个新的试验页面。因此,在10-15秒的时间内,使用将被恢复大约进行2次试验

我担心的是服务器是一个Web服务器,这将是php脚本的一部分。试用将被插入,会话将被更新,用户可能会通过令牌更新到。但是令牌可能是会话表的一部分。要将更新从2个表减少到1个表,只需插入1个

我还担心浪费的刺激行。这基本上是一个数组,每次试验都会更新和扩展。在每次试验开始时,它都会被检查。因此,我要么从会话中检索浪费的刺激数组,要么执行一个选择sd,根据用户的ID将会话和试验连接到会话。然后将sd放入数组中

我不确定这方面的最佳标准是什么

谢谢!任何其他能让事情变得更好的事情都有兴趣知道

如果你有任何问题,请告诉我

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


正如schema中提到的,.在底部建议了schema。并链接了它。

这取决于数据质量。FK越多越好。您需要更多FK。上面会散布对FK的评论。好的,感谢外键通知。我不知道这些是什么,但它似乎并不特别重要。我认为值得一提放进去。关于性能,这个表看起来像一个合法的结构吗?可以做些什么来提高性能?啊,你是说,
浪费的刺激是一个CSV,因为如果你不认为FK非常重要,我就不重写了,我请求不同意见。如果你想用垃圾加载你的表,那就动手吧。如果你认为数组是存储的在db中,我不同意你的看法。如果你想像你所说的那样获得性能,请查看带有索引的连接表。链接在上一篇评论中,我们不是来为clearleaders鼓掌的。部分原因是问为什么,提供经验,质疑问题。如果你想不经审查就确认,那就有浴室。它可能有一个镜子添加了
Laravel标记可能是一个