2017-10-09 132 views
-2

因此,我最近的任務是使用C#將舊的平面文件系統調度系統轉換爲SQL數據庫。我應該爲每個類別創建單獨的表嗎?

我發現的主要問題是任務(請參閱下面的代碼段)使用字符串列表(使用GUID創建)使我不確定如何構建數據庫。

public class Task 
{ 
     private string TaskID; 

     private string TaskName; 
     private string TaskDescription; 

     private bool IsComplete; 

     private DateTime EstimatedStartDate; 
     private DateTime ActualStartDate; 

     private DateTime EstimatedCompletionDate; 
     private DateTime ActualCompletionDate; 

     private string TeamLead; 
     private List<string> TeamMembers = new List<string>(); 

     private TaskType TaskType; 
     private string ParentID; 
     private List<string> ChildIDs = new List<string>(); 
} 

說到SQL我知道使用只能包含在單個單元格中的列表通常是nono。

真正的問題是:我是否應該在列表中查詢只需要查詢taskID或parentID以查找請求的任務或將其拆分爲系統中每個類別的不同表以4種不同的類別工作),然後依賴任務的類型和taskID來選擇需要查詢其子級的正確表。

+0

爲了能夠理解可以給這個問題的任何答案,您應該首先閱讀關係數據庫系統。現在的問題顯示出其嚴重缺乏知識。 – Fildor

+0

我可能會有一個Task表和兩個表,通過TeamMembers和ChildIDs的遞增主鍵連接到這個表。如果你希望它正常化,那麼可能還有一個TaskType表。 ChildIDs是否鏈接到其他任務?在這種情況下,將Children連接到childs主鍵的表格將是一個主意,而不是使用Guid。 –

+0

您需要閱讀如何規範化數據庫。在你的情況下,你將有一個表* Task *,它將引用自己(父),* Team * table,* TeamMember *表。一個*團隊*可以有很多*團隊成員*,並可能(取決於您的要求)另一種方式,那麼你有多對多的關係來處理。你明白了。 – CodingYoshi

回答

1

如果使用半正式語法更清楚地定義問題域,它會有所幫助。解釋你的代碼片段,我認爲它歸結爲以下內容。

A task is identified by TaskID 
A task has attributes name, description etc. 
A task has exactly one person, in the role "TeamLead". 
A task has 0 or more persons, in the role "team member". 
A task has exactly one type, selected from a collection of valid types. 
A task may or may not have a relationship to another task, in the role ParentTask 
A task has a relationship with 0 or more other tasks, in the relationship "childTask". 

如果這是真的,你可以看到關係模型的出現。

通常,任何有「x..n」連接的關係都會導致橋接表。在你的情況下,這是「TeamMembers」,TaskIDPersonID作爲外鍵。 ChildTasks是一個類似的關係。

在「只有一個」或「可能有一個」的情況下,它是一個外鍵。 TeamLead和TaskType就是例子。

絕對沒有理由爲任務類型創建不同的表格 - 關係模型鼓勵您將類似的東西組合在一起,並用數據而不是結構來區分它們。

0

具有相同結構和相同含義的多個表是一個強大的反模式:您必須修改所有查詢以訪問正確的表(如果要彙總多個類別的數據,這會變得特別複雜),而您只要可能的類別集合發生變化就必須修改數據庫結構。不太可能有任何可衡量的(更不用說明顯的)性能差異。

換句話說,千萬別把數據納入表名

相關問題