2012-03-29 3 views
1

나는 상태 테이블 예를 들어 나는 상태 변경의 역사를 보여줄 수 있기를 원하는asp.net mvc3 엔티티 프레임 워크는

에 대한 Database best practices - Status를 볼 수있는 응용 프로그램을 찾아보십시오. mvc3과 이와 같은 엔티티 모델을 사용하여 구현할 수있는 방법은 두 가지가 있습니다. - http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application

상태 테이블에 연결해야하는 개체에 대해 항상 StatusID 속성을 가질 수 있습니다.

작업
ID
이름
StatusID

상태
ID 상태

또는, 나는 StatusHistory 테이블이 있고 StatusID 속성에게를 반환하는 함수를 만들 수 상태 개체 예

작업
ID
이름

상태
ID 상태

StatusHistory
ID
작업 ID
합계 USID
날짜

및 작업 모델 클래스 (Job.cs)에

는 작업 관련 최신 상태 개체에 대한 StatusHistory 테이블을 조회하여 한 상태 개체를 반환 상태라는 함수를 가지고있다.

누구나 이와 비슷한 작업을 했습니까?

+0

더 이상 사용되지 않는 데이터를 유지하는 것이 "모범 사례"라고 동의해야합니다. 물론 상황에 따라 상태가 필요하지만 때때로 데이터베이스가 복잡해지고 쿼리가 느려지므로 기본 데이터베이스에 보관해야하는 것은 아닙니다. –

+0

효율적인 인덱스를 가진 하나의 테이블 나는 천천히 또는 어수선하게 생각하지 않을 것입니다. 우리는 거의 즉시 조회가 가능한 20 만 건의 행 테이블을 보유하고 있습니다. –

답변

0

당신은 할 수 있습니다

StatusHistory

  • ID
  • 작업 ID
  • StatusID
  • 날짜

작업에 포함하면서 현재 StatusID .

작업

  • ID
  • StatusID (최신)

이 방법으로 당신에게 "캐시"작업의 최신 상태를 대신 검색 ..

StatusHistories.OrderDescending(s => s.Date).FirstOrDefault(); //unnecessary task 

때마다 당신에게 필요해.

+0

감사 ai.farfa. 또한 상태에 옵션 설명이 있지만 최상의 성능을 얻으려면 같은 방식으로 설정하는 것이 좋습니다. –

0

당신이 찾고있는 것은 Temporal Database입니다. 대다수의 상태 코드를 유지하는 대신 로직을 파이프 라인으로 분해합니다. 예를 들어, 일자리 시작 날짜, 일을 마친 날짜. 완료된 작업은 데이터베이스를 깨끗하게 유지하기 위해 특정 시점에서 아카이브로 마이그레이션해야합니다.

+0

답변 해 주셔서 감사합니다 트래비스, 내 다른 의견에 따라 내 유일한 의견은 반드시 "사용하지 않음"을 의미하는 것은 아닙니다. 시스템에 따라 실제로이 사이트와 마찬가지로 참조 용으로 사용될 수 있습니다. 응답 된 모든 질문을 보관하는 경우에는 어떻게됩니까? –

+0

@smartfaceweb - 보관과 함께 사용해야하는 특정 수준의주의 사항에 동의합니다. 나는 당신의 예제가 실제로 같다고 생각하지 않습니다. 왜냐하면 저는 데이터 이동과 "소프트 삭제"또는 일부 사람들이 버팀목으로 사용하는 비추천 데이터 숨기기에 대한 차이점에 대해 이야기하고 있었기 때문입니다. 이것은 "닫힌", "isActive", "isDeleted"등의 플래그가 지정된 데이터가있는 경우 일반적 일 수 있습니다. 관련 데이터가 가장 확실히 참조 할 수 있도록 남아 있어야한다는 것에 동의합니다. –

관련 문제