我正在編寫一個在線應用程序表單,我試圖收集的其中一條數據是用戶的教育歷史;學校名稱,學校城市,他們在那裏的年份和成就。這些數據可以在零到大約四個不同學校之間的任何地方收集,並且如果需要,用戶將動態地添加更多字段。將未知行數插入到MySQL數據庫中
我的問題是如何在數據庫中捕獲這個問題,因爲我不知道用戶將添加多少學校?它可以在一個表格中完成,還是需要創建多個表格並在單獨的表格中捕獲教育數據?
任何幫助或指針將不勝感激。
謝謝。
我正在編寫一個在線應用程序表單,我試圖收集的其中一條數據是用戶的教育歷史;學校名稱,學校城市,他們在那裏的年份和成就。這些數據可以在零到大約四個不同學校之間的任何地方收集,並且如果需要,用戶將動態地添加更多字段。將未知行數插入到MySQL數據庫中
我的問題是如何在數據庫中捕獲這個問題,因爲我不知道用戶將添加多少學校?它可以在一個表格中完成,還是需要創建多個表格並在單獨的表格中捕獲教育數據?
任何幫助或指針將不勝感激。
謝謝。
您需要單獨的表格。一人一人一人,另一人每學校一排。學校可以使用在學校桌上使用personID的人或者代表「人上學」關係的附加表。
任何一個實體(人)與多個其他實體(學校)的任何關聯都需要多個表。一個遵循的通用規則是每個「實體」一個表,另外還有用於多對多關係的附加表。
爲教育製作一張單獨的表格,並將php中的「教育」建模爲一個單獨的課程。
這個術語是標準化。您想要構建多個表,以便一行數據簡潔,並且儘可能少地重複信息。這可以通過在你的腦海中找出哪些信息將被重複,併爲這些信息製作一張表格來完成。
表之間的數據通過主鍵鏈接(希望自動增加整數)。在這種情況下,你會有兩張表:學生和教育。學生表將具有「學生ID,姓名等」,而教育表將具有「教育ID,學生ID,學校名稱,學校城市,學生學生ID等」。
注意Student.StudentID將匹配Education.StudentID,可以用下面的查詢來獲得:
select Student.*, Education.* from Student left join Education on Student.StudentID = Education.StudentID
事實上,這將有「SchoolName」和「SchoolCity」重複一遍又一遍,所以這還沒有完全標準化。要繼續,你需要再次改變它一點點:
Student: StudentID, Name, etc
School: SchoolID, SchoolName, SchoolCity, etc
Education: StudentID, SchoolID, StudentSchoolID, etc
注:每個學生都有在每次上學不同的學生證 - 不自動遞增整數混淆「StudentID」。要獲得這種情況下的列表:
select Student.*, Education.StudentSchoolID, School.* from
Student left join Education on Student.StudentID = Education.StudentID
left join School on Education.SchoolID = School.SchoolID
我建議你閱讀WikiPedia文章[數據庫規範化](http://en.wikipedia.org/wiki/Database_normalization)... – ircmaxell 2010-12-21 13:59:07