RavenDB와 같은 문서 데이터베이스가 비 관계형 인 경우 여러 문서에 공통으로 포함되어있는 데이터를 복제하지 않으려면 어떻게해야합니까? 데이터를 복제해도 괜찮 으면 어떻게 유지합니까?RavenDB와 같은 문서 데이터베이스에서 데이터 중복을 방지하려면 어떻게해야합니까?
답변
문서 데이터베이스를 사용하면 데이터를 어느 정도 복제해야합니다. 그 정도는 시스템 및 사용 사례에 따라 다릅니다. 우리는 간단한 블로그와 사용자 집계가있는 경우
예를 들어 우리는 그들을 설정할 수 있습니다 :
나는의 ID와 이름 속성 블로그 클래스 내부 BlogUser 클래스를 중첩 한이 예에서는public class User
{
public string Id { get; set; }
public string Name { get; set; }
public string Username { get; set; }
public string Password { get; set; }
}
public class Blog
{
public string Id { get; set; }
public string Title { get; set; }
public class BlogUser
{
public string Id { get; set; }
public string Name { get; set; }
}
}
블로그와 관련된 User Aggregate. 블로그 클래스가 관심있는 유일한 필드이므로 블로그가 표시 될 때 사용자 이름이나 비밀번호를 알 필요가 없습니다.
이러한 중첩 클래스는 시스템 유스 케이스에 따라 달라 지므로 신중하게 설계해야하지만 일반적으로 단일 읽기를 사용하여 데이터베이스에서로드 할 수있는 집계를 시도하고 설계하는 것이 좋습니다. 데이터를 표시하거나 조작하는 데 필요한 모든 데이터.
그러면 User.Name이 업데이트 될 때 어떤 일이 발생하는지 묻습니다.
대부분의 문서 데이터베이스에서는 업데이트 된 사용자에 속한 모든 Blog 인스턴스를로드하고 Blog.BlogUser.Name 필드를 업데이트하고 다시 데이터베이스에 저장해야합니다.
Raven은 업데이트 기능을 지원하기 때문에 약간 다르므로 RavenDB에 대한 단일 업데이트를 실행하면 사용자 블로그의 BlogUser.Name 속성을 최신으로 업데이트하여 업데이트하지 않고도 모두 업데이트 할 수 있습니다 개별적으로
수있는 모든 블로그에 대한 RavenDB 내 업데이트 (수동 방식) 작업을위한 코드 :
public void UpdateBlogUser(User user)
{
var blogs = session.Query<Blog>("blogsByUserId")
.Where(b.BlogUser.Id == user.Id)
.ToList();
foreach(var blog in blogs)
blog.BlogUser.Name == user.Name;
session.SaveChanges()
}
난 그냥 예제로 SaveChanges를 추가했습니다. RavenDB Client는 Unit of Work 패턴을 사용하기 때문에이 메소드 밖에서 실제로 발생해야합니다.
IMHO에 대한 "올바른 답변"이 없습니다. 복제하는 데이터가 얼마나 가변적인지에 따라 달라집니다.
문서 DB 디자인과 관계형에 대한 많은 답변을 보려면 RavenDB documentation을 살펴보고 Document Structure Design Considerations 문서의 "연결 관리"섹션을 자세히 확인하십시오. 즉, 문서 DB는 공유 데이터를 문서에 포함하지 않으려는 경우 ID로 참조 개념을 사용합니다. 이 ID는 FK와는 다르며, 무결성을 보장하고 해결하기 위해 전적으로 애플리케이션에 달려 있습니다.
- 1. 기사를 저장하는 RSS 리더를 만드는 동안 중복을 방지하려면 어떻게해야합니까?
- 2. Android 테스트 응용 프로그램에서 코드 중복을 방지하려면 어떻게해야합니까?
- 3. 내 솔루션에서 공통 루프의 중복을 방지하려면 어떻게합니까?
- 4. WPF 목록 상자 컨트롤에서 중복을 방지하려면 어떻게합니까?
- 5. 중복을 확인하거나 데이터베이스에서 예외를 catch해야합니까?
- 6. NSUrlConnection의 여러 인스턴스로 데이터 손상을 방지하려면 어떻게해야합니까?
- 7. SQLite 데이터베이스에서 중복 행을 업데이트하는 것을 방지하려면 어떻게해야합니까?
- 8. 데이터 테이블에서 중복을 제거하십시오.
- 9. 자동 회전을 방지하려면 어떻게해야합니까?
- 10. 재생 공격을 방지하려면 어떻게해야합니까?
- 11. NoSQL 데이터베이스에서 문서 리팩토링
- 12. 데이터 구조와 같은 데이터베이스에서 효율적인 AND 구현
- 13. 데이터베이스에서 어떻게 중복을 줄일 수 있습니까?
- 14. [데이터베이스] 명령 사용을 방지하려면 어떻게해야합니까?
- 15. 페이지 다운과 같은 특정 이벤트에서 JScrollBar가 스크롤되는 것을 방지하려면 어떻게해야합니까?
- 16. 두 사람이 같은 crowdsourcing 작업을 동시에 시작하는 것을 방지하려면 어떻게해야합니까?
- 17. 문서 데이터베이스에서 패밀리 트리와 같은 구조를 모델링하는 방법
- 18. 이 메모리 경고를 방지하려면 어떻게해야합니까?
- 19. JavaScript에서 기본 동작을 방지하려면 어떻게해야합니까?
- 20. 본문에서 선택 스크롤을 방지하려면 어떻게해야합니까?
- 21. 코드의 HTML 인코딩을 방지하려면 어떻게해야합니까?
- 22. FormView에서 HTML 인코딩을 방지하려면 어떻게해야합니까?
- 23. TextView에서 스 와이프를 방지하려면 어떻게해야합니까?
- 24. Hibernate/HQL - 데이터베이스에서 반환 된 모든 중복을 얻는 방법?
- 25. 관계형 데이터베이스에서 이동하려면 어떻게해야합니까?
- 26. XMLSerializer.serializeToString()이 속성을 재정렬하는 것을 방지하려면 어떻게해야합니까?
- 27. 우아한 이벤트를 유지하면서이 코드 중복을 없애려면 어떻게해야합니까?
- 28. 이러한 C 매크로 간의 중복을 제거하려면 어떻게해야합니까?
- 29. TableViewController - 데이터베이스에서 데이터 검색
- 30. 많은 소규모 클래스에서 코드 중복을 피하려면 어떻게해야합니까?
어쨌든 업데이트를 위해 세트 기능을 실제로 지원합니까? –
그렇다면 다른 문서에서 검색해야하는 데이터를 복제해야하며 세트 기능을 사용하여 복제 된 데이터를 업데이트/유지 관리해야한다고 말하는 것이 안전합니까? 그 업데이트는 어떻게 생겼을까요? (당신의 대답은 훨씬 나아졌습니다!). 감사! –
@ 존 나는 먼 길을 예로 든 예를 추가했는데 레이븐이 아직 작업을 설정하지 않은 것으로 보았습니다. 살펴보고 예제를 추가하겠습니다. –