2011-04-08 36 views
1

我目前正在開發一個學生管理系統,用於跟蹤他們上課的學生和學期。我有一項功能,允許用戶通過Excel文件導入數據。數據驗證優化

通過流程我驗證數據的有效性(無效字符,電子郵件和這樣),我檢查重複對數據庫以查看是否存在學生和/或已經採取類。爲了實現驗證,我必須爲每個學生運行兩個查詢,如果我只需要一次管理250名學生(每個查詢的平均運行時間爲0.004秒),那麼這兩個查詢都不錯。當聽衆接近500名學生時,問題就開始形成。整個驗證過程大約需要2.5秒。

在我的書中,如果這種情況只發生一次就沒有問題,但是每次數據通過順序導航加載時都會發生,因爲我允許用戶在導入之前查看數據(每頁顯示30個)並且可以編輯他們。

會是什麼來解決這個瓶頸的最好辦法,還是應該讓它成爲並警告用戶?

什麼會達到最大的可擴展性最好的方法是什麼?

編輯:

在我的應用程序已經分居的學生,在他們參加學期。 我運行的第一個查詢是檢查學生是否存在。如果它是新生,那麼它將創建一個新生,否則學生的數據會更新。

第二個查詢被用來檢查,如果學生已經參加了,我嘗試添加他的學期。如果他已經參加,他將被排除在進口之外。

驗證過程進行如下:

Trim white space 
Strip html tags 

check email validity 
check if the semester for which I try to register him is a valid semester (ie : w11 for winter 2011) 
check if the province is a valid canadian province 

// first query 
check for birthday, first and last name in the database 
// second query 
check if the student is already registred for the semester in the database 

前三檢查必須是真實的是一個有效的輸入

如果第一次查詢返回true,學生存在的,必須將數據更新如果它返回false,則必須創建一個新學生和一個新學生。

如果第二次查詢返回true,學生不必再註冊,因爲他已經參加學期,如果返回false學生必須註冊所需的學期

+1

你能不能給你需要運行什麼樣的查詢一些信息呢?示例代碼會很有幫助。 – AgentConundrum 2011-04-08 13:54:47

+0

我無法理解爲什麼有2個查詢?您是否使用查詢驗證您的數據?如果不是那麼爲什麼第二個查詢? – 2011-04-08 13:57:00

+0

爲什麼你使用查詢來驗證,如果你使用正則表達式或在PHP中的東西來驗證? – mcgrailm 2011-04-08 14:00:37

回答

1

的時間大概花了製造寧可洗牌數據的查詢。也許你可以通過在批次通過所有的學生去啓動腳本,並建立一個查詢,導致學生已經定義,例如:

SELECT student_id FROM student WHERE student_id IN (student, ids, from, your, batch, file) 

有了這些數據,你可以做一個簡單的檢查,如果學生需要的更新或創建。基本上可以用相同的問題來獲得已經註冊的人。

0

我不是完全清楚整個過程,但是你說用戶可以編輯數據(在初始導入和驗證之後?)爲什麼重新運行整個驗證,而不僅僅是驗證已編輯的記錄?