2015-11-05 11 views
0

我現有的表結構如下:現有的表設計變更

Students表列如下:

Year 
Student_Id 
Subject_Type_Id 
Quarter 
Complete_DTTM 
Column1 

現有的數據象下面這樣:

學生:

Year  Student_Id Quarter Subject_Type_Id Complete_DTTM  Column1 
--------------------------------------------------------------------------------------- 
2006  1    1  1    Null    x 
2006  1    2  1    10/2/2006   xyz 
2006  1    2  2    10/30/2006   abc 
2006  1    2  3    11/20/2006   def 

一個學生可以通過保存每個科目來學習多個科目sep通過從DropDownList中挑選。

現在新的要求是一個學生可以通過從複選框中選擇併爲Column1和Complete_DTTM提供數據並保存多個科目。

舊的和新的要求之間的區別在於用戶如何從舊的下拉列表中選擇主題類型,只能選擇一個主題,Column1和Complete_DTTM對於每個主題都是不同的。

有了新的要求,他們可以從複選框中爲學生和專欄1選擇多個科目,Complete_DTTM對所有科目都是一樣的。

新的數據將是象下面這樣:

Year Student_Id  Quarter Subject_Type_Id Complete_DTTM Column1 
-------------------------------------------------------------------------- 
2015  1   1   1, 2, 3, 4  12/31/2015  abcdef 
2015  1   2   1, 2, 3, 4, 5 1/1/2016   xyz 

如何更改「學生」表(我可以添加新表),以支持多個主題的ID,也需要支持舊的數據(如上圖所示的2006年)?

在此先感謝

+4

* NEW *佈局打破了規範化規則,並將成爲管理/使用的噩夢:不要這樣做,請使用一對多表格,以便每列有一個值*通過聯接可訪問。 –

+0

你可以給我一對一的表格結構嗎?需求是這樣的,我需要創建一個支持舊數據和新的表來完成這一要求。 –

+0

1.您在頂部顯示的表格似乎不是學生表格。如果它是學生表,哪個表由student_id列引用? 2.您的新需求不需要更改數據庫。它看起來像一個UI變化。而不是下拉菜單,您的客戶正在尋找主題的CheckBoxList。您將必須循環選定的主題併爲每個主題添加一條記錄。 – Adish

回答

0

您現在有一個一對多的關係,你需要一個子表的關係的許多部分。千萬不要將數據存儲在逗號分隔的列表中。當您想要查找數據int軟管表時,這是一種徹底打破性能的方法。這只是一個糟糕的設計。你需要規範化這些表格,我相信這就是你爲什麼得到這個特殊練習的原因。

1

您需要製作一張僅容納學生數據的表格。然後,您需要創建一個表格來存放主題類型數據。將它們鏈接在一起的表格。

CREATE TABLE Student (ID INT NOT NULL PRIMARY KEY, NAME VARCHAR(50) NOT NULL,n...) 

爲主題

CREATE TABLE Subject (ID INT NOT NULL PRIMARY KEY, Subject_Name VARCHAR(50)NOT NULL,n...) 

創建表,那麼你將需要一個表來這兩個鏈接在一起。

CREATE TABLE Student_Suject_Link (Student_ID INT NOT NULL, SUBJECT_ID INT NOT NULL) 

鏈接表需要具有到學生表和主題表的外鍵關係。 Student_ID需要是學生表中ID列的外鍵,並且對於主題表而言是相同的。 SUbject_ID需要是主題表中ID的外鍵。這應該滿足第三範式。如果您需要獲取數據,則可以輕鬆地連接表以獲得所需的數據。我重申它似乎創造了更多的工作,但管理添加列表到表格卻是非常容易的。當然,您可以將其他必要的字段添加到表格中,只需要將ID關聯即可。希望這可以幫助。