Jakie są zasady i korzyści wynikające z "modelu partyjnego"?

"model party" jest "wzorcem" do projektowania relacyjnych baz danych. Przynajmniej część z nich polega na znalezieniu wspólności między wieloma podmiotami, takimi jak klient, pracownik, Partner itp. i faktoring tego do bardziej "abstrakcyjnych" tabel bazodanowych.

Chciałbym poznać wasze przemyślenia na temat:

  1. Jakie są podstawowe zasady i siły motywujące stojące za modelem partii?
  2. co to nakazuje zrobić z modelem danych? (Mój bit powyżej jest dość wysoki poziom i całkiem możliwe, że niepoprawny w jakiś sposób. Byłem przy projekcie, który go używał, ale pracowałem z oddzielnym zespołem skupionym na innych kwestiach).
  3. jakie doświadczenie skłoniło cię do tego? Użyłeś go, a jeśli tak, to zrobiłbyś to jeszcze raz? Jakie były plusy i minusy?
  4. czy model partii ograniczył twój wybór ORMs? Na przykład, czy musiałeś wyeliminować niektóre ORM, ponieważ nie pozwalały one na wystarczającą "warstwę abstrakcji" między twoją domeną obiekty i twój fizyczny model danych?

Jestem pewien, że każda odpowiedź nie odpowie na każde z tych pytań ... ale cokolwiek dotyka jednego lub więcej z nich, pomoże mi podjąć pewne decyzje, przed którymi stoję.

Dzięki.
Author: Charlie Flowers, 2009-04-04

6 answers

  1. Jakie są podstawowe zasady i siły motywujące stojące za partią modelka?

W stopniu, w jakim go używałem, chodzi głównie o ponowne użycie kodu i elastyczność. Używaliśmy go wcześniej w modelu gość / użytkownik / Administrator i z pewnością udowadnia jego wartość, gdy trzeba przenieść użytkownika z jednej grupy do drugiej. Rozszerz to na organizacje i firmy reprezentowane przez użytkowników pod nimi, a to naprawdę zapewnia formę abstrakcji, która nie jest szczególnie związane z SQL.

  1. Co to nakazuje zrobić z modelem danych? (Mój bit powyżej jest dość wysoki poziom i całkiem możliwe w pewnym sensie niepoprawne. Byłem na projekt, który go używał, ale byłem praca z oddzielnym zespołem skupionym w innych kwestiach).

Jesteś całkiem poprawny w swoim bitu powyżej, choć wymaga to więcej szczegółów. Możesz sobie wyobrazić sytuację, w której podmiot w bazie danych (nazwij go stroną) kontraktuje się z innym Strony, które z kolei mogą się rozwijać. Stroną może być pracownik, wykonawca lub firma, wszystkie podklasy partii. Z mojego zrozumienia, miałbyś tabelę Party, a następnie bardziej szczegółowe tabele dla każdej podklasy, które następnie mogłyby być dalej podklasowane (strona -> osoba -> wykonawca).

  1. Co twoje doświadczenie doprowadziło cię do tego? Czy go używałeś, a jeśli zrobisz to jeszcze raz? Jakie były za i przeciw?

Ma jego korzyści, jeśli potrzebujesz elastycznie dodawać nowe typy do systemu i tworzyć relacje między typami, których nie spodziewałeś się na początku i architektem (użytkownicy przechodzący na nowy poziom, firmy zatrudniające inne firmy itp.). Umożliwia również uruchamianie jednego zapytania i pobieranie danych dla wielu rodzajów stron (firm,pracowników,kontrahentów). Z drugiej strony dodajesz dodatkowe warstwy abstrakcji, aby dotrzeć do danych, których faktycznie potrzebujesz i które zwiększają się załaduj (lub przynajmniej liczbę złączeń) do bazy danych podczas zapytań o określony typ. Jeśli abstrakcja posunie się za daleko, prawdopodobnie będziesz musiał uruchomić wiele zapytań, aby odzyskać dane, ponieważ złożoność zacznie szkodzić czytelności i obciążeniu bazy danych.

  1. czy model partii ograniczył twój wybór ORMs? Na przykład, czy muszą wyeliminować niektóre Ormy, ponieważ nie pozwolili na dość "warstwa abstrakcji" pomiędzy Twoim domena obiekty i Twoje dane fizyczne modelka?

Jest to obszar, w którym jestem wprawdzie trochę słaby, ale odkryłem, że korzystanie z widoków i lustrzanej abstrakcji w warstwie aplikacji nie sprawiło tego zbyt dużego problemu. Prawdziwym problemem dla mnie zawsze było "gdzie jest kawałek Data x living", gdy chcę odczytać źródło danych bezpośrednio(nie zawsze jest to intuicyjne dla nowych programistów w systemie).

 24
Author: Jeremy Stanley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-04 09:14:17

Ideą stojącą za modelami party (aka entity schema) jest zdefiniowanie bazy danych, która wykorzystuje niektóre z zalet skalowalności wolnych od schematów baz danych. Model party robi to, definiując swoje jednostki jako rekordy typu party, w przeciwieństwie do jednej tabeli na jednostkę. Rezultatem jest niezwykle znormalizowana baza danych z bardzo małą ilością tabel i bardzo małą wiedzą na temat znaczenia semantycznego przechowywanych danych. Cała ta wiedza jest popychana do dostępu do danych w kodzie. Aktualizacja bazy danych przy użyciu model party są minimalne do żadnego, ponieważ schemat nigdy się nie zmienia. Jest to zasadniczo gloryfikowana struktura modelu danych pary klucz-wartość z kilkoma wymyślnymi nazwami i kilkoma dodatkowymi atrybutami.

Plusy:

    Niesamowita skalowalność pozioma. Po zdefiniowaniu 5-6 stołów w modelu jednostki możesz udać się na plażę i popijać margarity. Możesz praktycznie skalować tę bazę danych tak bardzo, jak chcesz, przy minimalnym wysiłku.
  • baza danych obsługuje dowolną strukturę danych rzucaj. Możesz również zmieniać struktury danych i definicje stron/podmiotów na bieżąco bez wpływu na aplikację. To jest bardzo potężne.
  • można modelować dowolne jednostki danych, dodając rekordy, nie zmieniając schematu. Oznacza to, że możesz pożegnać się ze skryptami migracji schematu.
  • jest to raj dla programistów, ponieważ kod, który piszą, określa rzeczywiste byty, których używają w kodzie, i nie ma mapowania z obiektów do tabel lub czegoś podobnego. Ty można traktować tabelę stron jako podstawowy obiekt wybranej struktury (System.Obiekt dla. Net)

Wady:

  • Modele Party / Entity nigdy nie grają dobrze z ORMs, więc zapomnij o używaniu EF lub NHibernate, aby uzyskać semantycznie znaczące encje z bazy danych encji.
  • Wiele łączy. Wyzwania związane z tuningiem wydajności. Ten "przekręt" odnosi się do praktyk, których używasz do definiowania swoich podmiotów, ale można śmiało powiedzieć, że będziesz robił o wiele więcej z tych umysłowe pytania, które przyniosą Ci koszmary w nocy.
  • Trudniejsze do spożycia. Deweloperzy i profesjonaliści DB, którzy nie znają Twojej firmy, będą mieli trudniej przyzwyczaić się do podmiotów narażonych na te modele. Ponieważ wszystko jest abstrakcyjne, nie ma diagramu lub wizualizacji, które można zbudować na bazie danych, aby wyjaśnić, co jest przechowywane do kogoś innego.
  • potrzebne będą ciężkie modele dostępu do danych lub mechanizmy reguł biznesowych. Zasadniczo musisz wykonać dzieło zrozumienia co do cholery chcesz z bazy danych w pewnym momencie, a twój model bazy danych nie pomoże ci tym razem.

Jeśli rozważasz schemat strony lub podmiotu w relacyjnej bazie danych, prawdopodobnie powinieneś rzucić okiem na inne rozwiązania, takie jak magazyn danych NoSql, BigTable lub kV Stores. Istnieje kilka świetnych produktów z masowymi wdrożeniami i trakcją, takich jak MongoDB, DynamoDB i Cassandra, które były pionierami tego ruchu.

 10
Author: Michel Triana,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-27 19:20:49

Kiedy byłem częścią zespołu realizującego te pomysły na początku lat 80-tych, nie ograniczało to naszego wyboru ORM, ponieważ nie zostały one jeszcze wynalezione.

Wycofałbym się z tych pomysłów w każdej chwili, ponieważ ten konkretny projekt był jednym z najbardziej przekonujących dowodów koncepcji, jakie kiedykolwiek widziałem o" rewolucyjnej " idei (która z pewnością była w tamtym czasie).

Zmusza cię do niczego. I to nie powstrzymuje cię przed niczym (od jakiegokolwiek błędu, mam na myśli). Ten definiujący własne model informacyjny to Ty.

Wszystkie strony mają wiele wspólnych właściwości. Fakt, że mają nazwę i takie (nazwaliśmy je "signaletics"). Fakt, że mają główne/główne lokalizacje zwane "adresami". Fakt, że wszyscy są w pewnym sensie zaangażowani w umowy biznesowe.

 1
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-08 23:56:28

Jest to rozległy temat, polecam lekturę The Data Model Resource Book Volume 3-Universal Patterns for Data Modeling autorstwa Lena Silverstona i Paula Agnewa.

Właśnie otrzymałem swoją kopię i jest ona całkiem dobra - zapewnia widoczność wielu podejść do modelowania danych, w tym hybrydowych kontekstowych wzorców ról i tak dalej. Ma szczegółowe plusy i minusy dla każdego podejścia.

Istnieje mnóstwo sposobów modelowania relacji i ról partyjnych z ich zalety i wady. Pytanie, które zostało przyjęte jako odpowiedź, obejmuje tylko jeden przypadek "modelu partyjnego".

Na przykład w wielu podejściach pojęcia takie jak" pracownik"," kierownik projektu " itp. są to role , które partia może odgrywać w określonym kontekście. Postaram się dać Ci lepsze załamanie, gdy wrócę do domu.

 0
Author: kitsune,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-04 10:31:42

Jako prosta rozmowa z mojego zrozumienia: Modelowanie stron daje elastyczność i wymaga więcej wysiłku (jak T-SQL join i ...) do realizacji.
Chcę również zauważyć, że "korzystanie z modelowania stron (serializacja/generalizacja) daje możliwość posiadania FK-relacji do innych tabel". na przykład: pomyśl o różnych typach użytkowników (admin, user,...), które uogólniono do User tabeli, i można mieć UserID w Authorization tabeli.

 0
Author: Rzassar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-25 06:13:46

Nie jestem pewien, ale model partyjny brzmi jak szczególny przypadek wzoru uogólnienia-specjalizacji. W dziale "generalizacja specjalizacja modelowanie relacyjne" znajdziesz kilka ciekawych artykułów.

 -1
Author: Walter Mitty,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-04 19:07:41