我正在使用MySQL工作臺來管理我的數據庫,這個數據庫已交給我進行開發任務。不幸的是,模式是一場噩夢:無數表的主鍵,大量的列重複等。現有表上的MySQL中的複合主鍵
首先,我想添加一些獨特性,以便我可以以某種方式開始標準化。我有一個'學生'表,一個學生(帶身份證)在一個屬於特定學期的項目上工作(2014年秋季,2015年春季等)
由於同一個學生可以在同一個項目上工作,無論出於何種原因連續學期,只有將他們分開的方法是獲得(學生證,學期)PK。所以我確實需要這個複合PK。
我該如何改變現有的表格並設置複合PK?
編輯:
爲了澄清:該架構包含users
表與實際的學生信息(/姓,電子郵件,期限)。 students
表格更適合地命名爲projects
,因爲它僅通過ID引用學生,然後列出他們在其工作的學期中所從事的項目。所以至少,students.id
也將從users
FKK。
我知道上面沒有任何意義;我只是試圖保持這一步一次,因爲應用程序依賴於模式,我不想在這一點上引入任何新的錯誤。
爲了進一步澄清,這裏是users
和students
表什麼樣子:
students
id project termInitiated ...
20 XYZ Summer 2013
20 XYZ Fall 2013
23 ABC Fall 2013
24 ABC Fall 2014
...
users
studentId firstName lastName termInitiated
20 A AA Summer 2013
20 A AA Fall 2013
23 Z ZZ Fall 2013
24 Y YY Fall 2014
...
不幸的是,由於它的方式設置,我不能有studentId
本身就是一個PK,因爲同一個學生可能連續多個學期在同一個項目上工作。
最好的解決這將是一個全局唯一標識符,可以是指在不同的方面是相同的學生,但這個權利,現在,我沒有固定的時間將引入錯誤的巨大量。因此,我認爲考慮到我的侷限性,複合PK將是最好的解決方案。
您的方法沒有意義。如果您的'student'表包含* foreign *數據,則將其分成單獨的表格。 – 2015-02-06 05:35:02
請參閱我的編輯,因爲它作爲評論是相當長的。 – user991710 2015-02-06 05:41:05
你可能想檢查這裏的阿德里安的答案: http://stackoverflow.com/questions/8859353/alter-table-to-add-a-composite-primary-key – 2015-02-06 05:47:06