2009-03-05 5 views
3

사용자 설정이 포함 된 응용 프로그램 용 데이터베이스를 설계했습니다. 이 데이터베이스에는 몇 가지 시스템 사용자 설정이 미리로드됩니다. 이들은 버전마다 다를 수 있습니다. 이 설정을 어떻게 업데이트해야합니까? 내가 생각 해낸'시스템 데이터'가 데이터베이스에 있어야합니까?

용액 :

  1. 가 설정 테이블에 부울 '시스템'필드를 적용하고 모든 시스템 설정을 교체 할 때 데이터베이스 변경의 버전 번호입니다. (개발 중 데이터베이스를 끊임없이 지워야 할 때 이러한 설정을 설계하는 동안 매우 성가신 일입니다)
  2. 시스템 설정을 데이터베이스에 저장하지 말고 쿼리 할 때 시스템 데이터를 데이터베이스의 데이터와 병합하십시오.

현재 저는 첫 번째 작업을 수행하고 있지만 어쨌든 2 번째 작업이 더 적절합니다. 어떻게해야하며 Microsoft Entity Framework를 사용할 때 외부 데이터를 데이터베이스의 데이터와 원활하게 결합 할 수 있습니까?

+0

'시스템 사용자 설정'이란 무엇입니까? 기본 사용자 설정을 의미합니까? –

+0

나는 게임 컬렉션을 쓰고있다. 이 게임 배에는 각 게임에 대한 몇 가지 기본 시스템 설정이 함께 제공됩니다. 사용자는 자신의 설정을 만들어 대신이 설정을 사용할 수 있습니다. – Wouter

답변

1

조작이 많으므로 단순한 결합 (내외부 조인을 넘어 누가 시스템 설정과 일치하는지 또는 마음에 들지 않는지 확인하기 위해) 이상의 데이터를 수행하려는 결과를 초래할 수 있습니다. 사용자 데이터와 동일한 구조의 시스템 데이터

이렇게하면 사용자가 특정 값이 없을 때 시스템 데이터의 기본값을 채우는 것과 같은 동작을 허용합니다.

꽤 오랫동안 읽을 시간이 있다면 this blog post에서 설정 및 재정의 관리에 대한 몇 가지 흥미로운 점이 있습니다.

0

사용자의 기본값을 먼저로드 한 다음 사용자가 지정한 값을 맨 위에로드합니다. 그렇게하면 기본값을 변경할 수 있지만 사용자가 특정 설정을 변경하면 잃어 버리지 않습니다.

0

나는 1)로 달성하고 싶은 것이 확실하지 않지만 2)를 대답 할 수 있습니다.

생성 된 모든 엔티티 클래스는 부분 클래스이므로 자신의 속성 및 메서드로이 클래스를 확장 할 수 있습니다. 따라서 외부 소스 (예 : 구성 파일)에서 데이터를 가져 오는 엔티티에 추가 속성을 추가 할 수 있습니다.

이제는 필요한 정보 (예 : 많은 수의 항목 검색 중)를 가져올 방법이 없기 때문에 이것이 최선의 해결책이 아닐 수도 있습니다.

0

정말이 질문에지고 있는지 모르겠지만 재미있는 작은 데이터베이스 운동 줄 알았는데. 당신이 # 1에서 제안 당신이 "설정"라는 테이블이 있다고 가정 :

+------------+--------------+-----------+---------------+ 
| setting_id | setting_name | is_system | setting_value | 
+------------+--------------+-----------+---------------+ 
|   3 | foo   |   1 | Blue   | 
|   4 | foo   |   0 | Red   | 
|   5 | bar   |   1 | Green   | 
|   6 | baz   |   1 | Yellow  | 
|   7 | baz   |   0 | Orange  | 
|   8 | quux   |   0 | Purple  | 
+------------+--------------+-----------+---------------+ 

기본 키가 setting_id에있을 것이며, 유일 컨 스트레인 트가 열 setting_nameis_system에 적용됩니다 (부울이다).

다음 쿼리가 작업 할 것, 현재 (오버라이드 시스템 설정 가정 사용자 설정) 활성화 된 모든 설정을 찾으려면 :

+--------------+---------------+ 
| setting_name | setting_value | 
+--------------+---------------+ 
| foo   | Red   | 
| bar   | Green   | 
| baz   | Orange  | 
| quux   | Purple  | 
+--------------+---------------+ 
: 쿼리를 실행

SELECT setting_name, setting_value 
FROM setting s 
WHERE is_system = (
       SELECT MIN(is_system) 
       FROM setting si 
       WHERE s.setting_name = si.setting_name 
     ); 

이 결과를 생성

따라서 사용자 설정이 존재하면 가져오고, 그렇지 않으면 시스템 기본값이 대신 사용됩니다.

이런 식으로 MIN() 함수를 사용하는 것은 불리언 값을 조작하는 방법의 일종이지만 충분히 간단합니다.

관련 문제