참조 테이블을 고려할 때

Aug 26 2020

응용 프로그램을 생각할 때. 응용 프로그램 사용자 세부 정보를 말하겠습니다.

응용 프로그램을 통해 사용자가 프로필을 쉽게 편집 할 수 있다고 가정 해 보겠습니다.

성별과 같은 필드의 경우 대부분의 경우 MF 또는 기타로 표시됩니다. 예를 들어 이러한 값을 참조 테이블에 저장해야합니다.

그리고 저의 과장된 질문은 언제부터 응용 프로그램을 스타 스키마와 같은 스키마와 거의 너무 연관시켜 빠른 트랜잭션에 도움이되지 않게 만드는 것입니까?

모든 것을 사실과 차원으로 나누기 시작하면 응용 프로그램이 효율적으로 작동하지 않을 수있는보고 데이터베이스가 생깁니다.

답변

3 Christophe Aug 26 2020 at 17:30

그것은 모두 의도와 균형의 문제입니다. 결정을 내리는 것은 당신에게 달려 있습니다.

Gender참조 테이블 에 값 을 입력 하면 다음과 같은 이점이 있습니다.

  • 값을 쉽게 사용자 정의 할 수 있습니다.
  • 코드를 다른 언어로 쉽게 현지화합니다.
  • 가능한 값의 비교적 쉬운 확장;
  • 쿼리 및 표시의 균일화 / 일반성 : 모든 참조 테이블에 대해 동일한 접근 방식을 사용합니다.

또한 Gender앱 동작에 영향을주지 않고 설명 적이라면 더 이상 가능한 값에 대해 걱정할 필요가 없으며 열거 형도 필요하지 않아 매우 유연한 시스템을 얻을 수 있습니다. 반면에 일부 값에 대한 특정 동작이있는 경우 부분적인 유연성 만 갖게됩니다.

Gender참조 테이블에 입력하지 않으면 다음과 같은 이점이 있습니다.

  • 허용되는 값 및 관련 동작에 대한 더 나은 제어,
  • 2 바이트의 참조 테이블이 저장되었습니다 (하지만 db 크기에서는 차이가 없습니다)
  • 성능 향상, 조인 방지 (조인에 추가 가져 오기가 필요할 수있는 NoSql 데이터베이스에 적용됩니다. 이것은 최적화 프로그램이 참조 문자를 찾아 내고 조인을 만들기 위해 데이터를 캐시하는 RDBMS에 대한 인수가 아닙니다) 상당한 오버 헤드)
  • 표시된 값을 생성 할 수있는 경우 프레젠테이션의 유연성 향상 (특히 언어가 swift와 같은 관련 값을 허용하는 경우)

제 경험상 첫 번째 접근 방식은 코드와 코드 재사용을 단순화하는 데 매우 유용했습니다. 그러나 두 번째 접근 방식이 일부 상황 (특히 nosql 컨텍스트에서)에서 이러한 이점보다 클 수 있다고 상상할 수 있습니다.

나는 스타 스키마에 대한보다 일반적인 질문에 대답하는 것을 선호하지 않습니다. 왜냐하면 그것은 많은 기본 dbms뿐만 아니라 액세스 패턴과 쓰기 패턴에도 의존하기 때문입니다. 또한 비 참조 테이블이있는 스타는 요구 사항에 따라 불가피 할 수 있습니다.

1 GregBurghardt Aug 26 2020 at 19:47

나는 매우 간단한 이유 중 하나 인 ACID 의 "C"때문에 관계형 데이터베이스의 참조 테이블을 사용합니다 .

일관성 은 프로그래머뿐만 아니라 사용자에게도 유익합니다. 나는 이와 같은 필드가 단지 텍스트 인 데이터베이스에서 일했습니다. 사용자 인터페이스는 드롭 다운 또는 라디오 버튼 그룹을 표시하여 열거 형처럼 보이지만 데이터 수준에서는 개방형 텍스트였습니다. 시간이 지남에 따라 값 목록이 변경되었지만 이전 레코드는 업데이트되지 않았습니다. 사람들은 더 이상 사용자 인터페이스에 표시되지 않는 값이있는 오래된 레코드이기 때문에 실수로 필터링 된 레코드를 찾을 것으로 기대하는 보고서 및 임시 데이터베이스 쿼리를 작성합니다. 적절한 방어 프로그래밍이 코드에 존재하지 않는 경우 애플리케이션 코드에 치명적인 오류를 포함하여 성 가실 수 있습니다.

참조 테이블에는 최소 7 개의 열이 포함되어야합니다.

  • 기본 키 (문자열 또는 정수,이 경우 문자열 선호)
  • 이 기록이 유효한 선택이 된 날짜
  • 이 레코드가 지원 중단 된 날짜
  • 기록을 만든 사람
  • 생성시기
  • 기록을 마지막으로 업데이트 한 사람
  • 마지막으로 업데이트 된시기

선택적인 "설명"열은 처음에 레코드가 생성 된 이유 를 기록하는 좋은 방법 일 수 있습니다 .

다른 테이블에서 참조 테이블로 돌아가는 외래 키는 애플리케이션 계층의 열거 형이 데이터 계층에서 유효한 표현을 갖도록합니다. 각 레코드의 시작 및 종료 날짜는 각 열거 형 값이 현재 사용 중인지 또는 더 이상 사용되지 않는지에 대한 명확한 표시를 제공합니다. 이는 보고서 또는 임시 SQL 쿼리를 만들 때 도움이됩니다. 해당 레코드에 대한 비즈니스 용도에 대한 일종의 추가 정보가있는 테이블에 레코드가 있다는 것을 알고 있기 때문입니다.

상황이 변한다는 것을 기억하십시오. 남성과 여성은 꽤 견고한 개념처럼 보이지만 사회적 규범은 변합니다. 이진 선택으로 간주되던 것이 일부 국가와 문화에서 확장되고 있습니다. 새로운 가치가 추가 될 수 있습니다. 이전 값은 더 이상 사용되지 않을 수 있습니다. 참조 테이블은 현재 선택을 제한하는 방법을 제공 할뿐만 아니라 이전에 유효했지만 더 이상 유효하지 않은 과거 선택에 대한 기록 기록을 유지합니다.


부록 : 성별을 더욱 혼란스러운 개념으로 만들기 위해 각 개인은 한 번에 여러 성별을 식별 할 수 있습니다. 의료 분야는 귀하가 어떤 성별로 태어 났는지 알아야 의료 서비스에 차이를 만들 수 있기 때문입니다. 다른 사용 사례는 환경 설정을 알아야 할 수도 있습니다.

남성과 여성 이외의 성별 모델에 대한 산업 표준이 있습니까?를 참조하십시오 .