James A. Rosen
그는 물었다 12년 전
2

설계 논란이 일고 있다. 좋은 며칠입니까 조작할 수 있는 방법을 저장소에만 버전을 객체에는?

나는 처음에 이 의도적으로 애매한 것가운데 적지 않다. # 39 m, i& 어떤 문제가 # 39 m 이상의 찾는 중요한 논의 및 I& 찾고, 하드 분입니다.

39 m, 중간에 설계할 수 있는 앱을 높여줍니까 i& 같은 일이 포트폴리오 관리. I have so far) 은 설계

  • 문제: 문제를 해결해야 하는
  • 솔루션: 하나 이상의 문제에 대한 제안 솔루션으로
  • 관계: 두 가지 문제가 문제가 있으며, 두 가지 솔루션을 또는 간의 관계를 솔루션. 더 이상 나눌:
  • 상위-하위 - 일종의 분류 / 진단트리는 계층
  • 중첩됩니다 - 정도를 두 가지 솔루션을 또는 두 가지 문제는 정말 주소 같은 개념을
  • 문제 해결책을 충족합니다 정도를 주소 -

내 성격에 대한 질문은 이런 것들을 일컫는다. 문제 후 오려내기로 백업하도록 페이드할. 예상대로 해결 할 수 있는 솔루션을 구축한 일자에 수정할 수 있기 때문에 개발됐다. 시간이 지나면서 문제점 및 솔루션 발전시키십시오 관계 정도를 변경될 수 있습니다.

그래서 질문: what is the best design for 이러한 일을 모두 갈 수 없어 현재 버전 관리 및 오버클로킹된 목표성향의 역사 내 포트폴리오입니다?

  • 후: 아마 제가 이 질문에 답을 해야 더 구체적인 표시되어도 @Eric Beard& # 39 의 가치가 있는 up.*

39 세 개의 데이터베이스 설계, ve i& 여겨진다. # 39, ll 충분히 i& 나타내기 위해 각 반복된다. 내 질문은: 뭔가 생각할 수 있는, 또는 좀 더 나은?

1: 자기참조 버전 관리 문제 (별도로, 솔루션) 에 있다.

table problems
  int id | string name | text description | datetime created_at | int previous_version_id

  foreign key previous_version_id -> problems.id

이 때문에 문제가 있다, 나는 내가 원하는 건 때마다 새 버전을 포함한 전체 행을 복제할지 긴 '설명' 얻어맞았다.

2: 새로 만드는 릴레이션십 유형: 버전.

table problems
  int id | string name | text description | datetime created_at

이는 단순히 elationship 마이그레이션합니다 &solarisdvd 문제점 및 솔루션 테이블 꽂으십시오 관계를 표. 그러나 무엇보다 동일한 복제에서는 문제를 조금 &quot cleaner"; 내가 이미 이후 릴레이션십 추상적인 개념이다.

3: 더 많이 사용하여 subversion 같은 구조. 모든 문제 및 솔루션 속성뿐 별도의 테이블 및 버전 저들이요 로 이동

table problems
  int id

table attributes
  int id | int thing_id | string thing_type | string name | string value | datetime created_at | int previous_version_id

  foreign key (thing_id, thing_type) -> problems.id or solutions.id
  foreign key previous_version_id -> attributes.id

즉, 현재 버전의 로드하기에 문제나 솔루션을 페치할 하는데, 모든 버전의 속성에 따라 정렬할 날짜 다음 최신. 못할 수 있는 사악함이라. 어떤 것은 내가 정말 나쁜 것, 이러한 특성을 유형 검사 다는일은 can& t # 39 의 데이터베이스입니까. That '가치' 무료 텍스트 열 수 있다. 내가 만들 수 있는 '이름' 열 '표' 유형 '에 참조입니다 별도의' attribute_names 있는 것이 아니라, 열, t , # 39 의 '속성' 올바른 유형의 doesn& 인력용 표.

  • 나중에 그래도말야: # 39 에 대한 의견 등 멀티 테이블 keys:* @Eric Beard& 대응

오, ve 설명됨 # 39 는 어떤 I& 상투적이고: 두 종류의 가지뿐입니다 셨으며 (문제 및 솔루션). 사실 또는 서로 다른 유형의 것을 좋아하기 때문에 I& %s/dbase/ext_table. 약 9 10 9 # 39, d 가 외래 키 또는 10 단 밑에 전략이다. 내가 하고 싶은 일이 너무 작은 공통점이 있지만, 단일 테이블 상속 사용하는 것이 바람직하다고 할 수 있는 매우 고 결합할 한 표.

답변 5 개

이에 대해 어떻게 생각하나.

테이블 문제를 int id 문자열을 설명두 datetime created_at 이름 텍스트

테이블 problems_revisions int 수정번호 int id 문자열을 설명두 datetime created_at 이름 텍스트 외래 키 id - &gt. problems.id

업데이트 전에 추가로 테이블이 있는 개전판이 삽입하십시오 수행해야 합니다. 그러나 이는 너희는너희가 는 빠르고 삽입하십시오 이 추가 비용을 부담해야 한다.

select 문제를 효율적으로 액세스하면 최신 버전으로 평소처럼 1.

  1. 스키마 즉 직관적이고 가까운 현실은 운영까지도 (모델)
  2. 간 조인 테이블 스키마 유지할 수 있는 효율적인
  3. 버전 번호를 사용하여 파일에 대한 기록을 통해 같은 버전 관리 할 수 있는 트랜잭션 테이블 당 busines SVN 않습니다.

@Gaius

foreign key (thing_id, thing_type) -> problems.id or solutions.id

이런 종류의 &quot, multidirectional&quot 주의해야 합니다. 외래 키. 내 경험상 쿼리하지 성능이 낮은 경우 확인할 수 있는 것이 크게 참가하십시오 조건이 문자를 먼저 표를 아웃해야 참가하십시오 생일날이야 # 39 이 우아한 하지만 누얼바이 doesn& t 아닌 것 같다.

problem_id and solution_id 

내가 긁어줄게 작동합니다.

또한 쿼리하지 성능은 물론 디자인 할 경우 추가 검사를 받을 수 있는 그들이실천하는 마우치 최신 버전의 기록. 하지만 이 에로남이네 경합이 업데이트뿐 걱정할 필요 없습니다.

Eric Z Beard
WW.
그는 12년 전 댓글을 달았습니다
0

이러한 외래 키 때문에 오류가 발생할 수 있는 상태로 투표를 검색하기를 여러 테이블 옵티마이저입니다. # 39, s 도 it& 나쁜거라 모피쳐 삭제하면 대한 기록 및 초강수를 뒀다.

이 사이트는 온데간데없군, 사운드 것 같은데.

지금처럼 갈 수 있는 시스템, 데이터베이스 설계 버전 업데이트는 절대 실제 SVN 것 같은데, 그냥 삽입물의 할 때, 당신이 원하는 것을 변경할 수 있습니다 (버전으로 번호임) 이 호출됨 마우치, 다중 값 동시성 제어. Wiki 는 다른 좋은 예입니다.

39 의 it& 선택할 수 있는 좋은 방법이 쉽게 답할 수 있는 모델의 관련된 일반적인 데이터 구조를 요청할 수 있습니다. # 39 의 it& 가능성이 가장 you& # 39, 현재 대부분의 시간을 포지셔닝하십시오 관심이 있을 정도다. 특정 문제에 대한 기록 및 솔루션 드릴할 꽂으십시오 스다크 할 것입니다.

내가 현재 위치를 나타내는 테이블을, 솔루션, 관계 문제에 대한 있을 것이라고 말했다. '표' 등 ',' solution_history problem_history 될 수도 있을 것이다. 이러한 약간만이라도 하위 테이블을 포함할 뿐만 아니라 문제 "에 대한 추가 열 버전 번호 '와' 페스티베다트 '. 주요 약간만이라도 ('프로브레미트', '버전 번호').

업데이트했는지 때 이전 값 기록하십시오 problem_history '표' 에 문제가 됩니다. 따라서 가급적 시점으로든 쿼리합니다 아웃해야 특정 날짜에 당시 훈령으로 적합한 'record' problem_history 선택할 수 있습니다.

또한 이 전에, 나는 여기서 I& # 39, ve done '와' 문제 '를 보기 위한 노조의 problem_history 만든 이는 때로 유용한 다양한 질의입니다.

현재 상황에선 옵션 1 더욱 어려운 쿼리합니다 혼합입니다 데이터를 통해 고객의 모든 역사적인 현재 데이터.

옵션 3 것입니다 (nasty) 으로, ll be you& # 39 를 위해 나쁜 성능과 쿼리하지 대해 코드를 많은 행뿐만 뭐하러요 방금 액세스하면 박스트롤의 단순해졌습니다 질의입니다.

39 의 there& 인 것 같군.

옵션 4: 하이브리드

일반적인 특성을 가지는 움직이십시오 붙여넣습니다 단일 상속 관심용 custom_attributes '표' 표 추가합니다. 따라서, 외래 키 간단해진다는 낮춰줍니다 복제에서는 및 유연성을 제공합니다. # 39, it doesn& 타입 안전 추가 속성을 대한 문제도 해결할 수 없다. 또한 두 가지 방법으로 어떤 것을 갖고 있기 때문에 조금 복잡한 자도으로 속성은 이제.

'설명' 와 경우, 또 다른 대형 필드용 셨으며 좀 표시되어도 doesn& 복제에서는 공간 # 39 표, 이 문제를 해결할 수 없다.

table things
  int id | int type | string name | text description | datetime created_at | other common fields...
  foreign key type -> thing_types.id

table custom_attributes
  int id | int thing_id | string name | string value
  foreign key thing_id -> things.id