2015-11-07 84 views
-1

所以我是新來的數據庫結構,我目前正在製作一個應用程序。我想要你們運行這個結構,以確保這是構建數據庫的最佳方式。製作一個堅實的基礎數據庫結構

所以這個應用程序,基本上是爲了學習的幾個實驗。因此,基本上,您登錄後,您將看到各種任務,然後創建一個會話。爲此您需要完成其他任務。每次試驗記錄,並在會議結束後(通過試驗的次數確定,然後應用程序返回到菜單。

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,會話將被更新,用戶可能會更新通過令牌獲得UPDATED。但令牌可能是會話表的一部分。僅將UPDATE從2更改爲1表,只有1個插入。

此外,我關注的是wasted_stimuli行。這基本上是一個數組,每個試驗都會更新和擴展。在每次審判開始時,都會進行檢查。因此,我要麼從會話中檢索wasted_stimuli數組,要麼根據用戶執行SELECT sd WHERE JOIN SESSIONS和TRIALS BY ID到session_id。然後將sd放入數組中。

我不確定什麼是最好的標準。

謝謝!任何其他可以使它變得更好的東西都會對知道感興趣。

讓我知道如果您有任何疑問

+0

增加'Laravel'標籤可能是一個 – Drew

回答

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。在底部建議的模式。並將其關聯。

+1

它歸結爲數據質量。 FK越多越好。你需要更多的FK。對此類的評論分散在 – Drew

+0

上面,謝謝你的外鍵通知。我從來不知道這些是什麼,但它似乎並不重要。我認爲這將是值得的。 表現如何,表格看起來像一個合法的結構?可以對變頻器的性能做些什麼? –

+0

啊你是說'wasted_stimuli'是一個CSV,因爲我不會重寫[這個答案](http://stackoverflow.com/a/32620163) – Drew