5

Używamy źródeł zdarzeń w SQL Server 2016. Mamy całkowitą aplikację produktu klienta, każda jest oznaczona etykietą CustomerId i otrzymuje pojedynczy element linii Przewodnika w magazynie zdarzeń. Jest to podstawowy identyfikator dla instrukcji zapisu zdarzeń zapisu. Aplikacja produktu zawiera wiele różnych rzeczy relacyjnych (które nie mają identyfikatorów, ale klucze naturalne), każdy klient ma wiele adresów, kont, wiele zamówień. Magazyn zdarzeń zapisu zostanie zmapowany na relacyjne tabele bazy danych w dowolny sposób. W bazach danych staramy się łączyć klucze zastępcze zamiast kluczy naturalnych.Sourcing zdarzeń i wiele tabel relacyjnych SQL Server

Czy klucze zastępcze mogą być Guidami, czy możemy używać liczb całkowitych (może Tożsamości) w celu szybszego łączenia?

Pamiętaj, że jedynym głównym identyfikatorem w magazynie zapisu zdarzeń jest aplikacja Guid z identyfikatora klienta (duży blok json zawierający kilka atrybutów kolumn tabeli, które chcemy modelować), ale tabele relacji podrzędnych, które mogą się zmieniać w dowolnym momencie w modelu odczytu , nie ma elementu podrzędnego Guid w magazynie zdarzeń zapisu.

+0

Całe miejsce w CQRS polega na tym, aby model odczytu był zoptymalizowany do czytania. Znaczenie - zdenormalizowane, nie lub bardzo mało, sprzężenia i tak dalej. Co więcej, możesz robić to, co chcesz, po prostu musisz się martwić, że będziesz aktualizował odczytany model ze zdarzeniami, dzięki czemu identyfikator agregacji jest wysyłany i przechowywany po stronie odczytu. –

+0

To interesujące, zachowam łączny identyfikator Aggregate ID we wszystkich naszych 50 tabelach relacyjnych (w tym przypadku umieścimy identyfikator CustomerID w tabelach 5 ), dziękuję, smutne jest to, że książki o modelach odczytu danych SQL nie istnieją , więc architektura różni się od OLTP; nauczyłem się także usuwać unikalne i obce ograniczenia, ponieważ są one stosowane w domenie domeny – AppleBook89

+0

Myślę, że w odniesieniu do modelu Inmon, pozwala to na elastyczność modelowania i relacjonowania tego, jak chcemy, na przykład, jeśli chcę uruchomić funkcję Distinct Sql, która jest już predone, vs prowadzenie odrębnej funkcji w szerokim, wielordzeniowym modelu Kimball, jednak poproszę nasz zespół o zrobienie obu, dziękuję – AppleBook89

Odpowiedz

3

Tak, można użyć co trzeba w danej read model realizacji, ale trzeba wziąć pod uwagę, że read model powinna być rebuildable w dowolnym momencie. Tak więc po odbudowaniu read model może użyć innych zastępczych identyfikatorów lub po prostu zaimplementować go w taki sposób, że za każdym razem otrzyma te same identyfikatory (mam na myśli funkcję Autoincrement).

P.S. dlaczego nie spróbować denormalizować swoich danych? W event sourcing jest powszechne, aby uniknąć używania łączenia, zamiast przyspieszać je w wersji read model.

Powiązane problemy