그래서 저는 최근 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의 경우 단일 셀에만 포함될 수있는 목록을 사용하는 것이 일반적으로 비효율적이라는 것을 알고 있습니다.
실제 질문은 : 쿼리가 taskID 또는 parentID를 쿼리하여 요청한 작업을 찾거나 시스템의 각 범주에 대해 서로 다른 테이블로 분할해야하는 목록에 있어야합니다. 네 가지 범주로 작동) 작업 유형 및 taskID에 종속되어 해당 하위 항목을 쿼리해야하는 올바른 테이블을 선택합니다.
이 질문에 대한 답을 이해하려면 먼저 관계형 데이터베이스 시스템을 읽어야합니다. 문제는 그 지식의 심각한 부족을 보여줍니다. – Fildor
난 Task 및 TeamMembers 및 ChildIDs에 대한 증가 기본 키를 통해 연결하는 두 테이블에 대한 테이블을 아마 것입니다. TaskType을 테이블로 정규화하려는 경우 가능합니다. 다른 작업에 ChildID 링크가 있습니까? 이 경우 Childs가 childs 기본 키에 연결되는 테이블을 갖는 것이 Guid를 사용하는 대신 아이디어가 될 수 있습니다. –
데이터베이스를 정규화하는 방법을 읽어야합니다. 귀하의 경우에는 테이블 * 작업 *을 가지며 자체 (상위), * 팀 * 테이블, * TeamMember * 테이블을 참조합니다. A * Team *은 * TeamMember *를 여러 개 가질 수 있으며 (귀하의 요구 사항에 따라 다름) 다른 방식으로도 처리 할 수 있으므로 다 대다 관계를 유지할 수 있습니다. 당신은 요점을 얻습니다. – CodingYoshi