Lekki schemat CRM dla małych zespołów, który pozostaje prosty
Zbuduj lekki schemat CRM, który utrzymuje Kontakty, Transakcje, Aktywności i uprawnienia proste, a jednocześnie wspiera wiarygodne raportowanie i codzienne procesy.

Jaki problem ma rozwiązać ten schemat CRM
Mały zespół potrzebuje CRM, który szybko odpowiada na codzienne pytania: z kim rozmawiamy, co próbujemy zamknąć, co wydarzyło się ostatnio i co będzie następne. To jest prawdziwe zadanie lekkiego schematu CRM. Wszystko, co nie wspiera tych pytań, to zwykle hałas.
Małe zespoły rzadko potrzebują głębokich hierarchii kont, dziesiątek obiektów niestandardowych czy skomplikowanych modeli scoringowych. Potrzebują wyraźnego przypisania właściciela, prostą historię punktów kontaktu i pipeline, który wszyscy rozumieją jednakowo.
„Prostota” kończy się, kiedy opiera się na wolnym tekście i duplikatach. Jeśli jedna osoba wpisze etap transakcji jako „Negocjacje”, a inna jako „negocjowanie”, raportowanie staje się zgadywanką. Jeśli aktywności żyją w osobnych tabelach dla połączeń, spotkań i notatek, kończysz z wieloma polami daty i brakiem wiarygodnej wartości „ostatnio kontaktowano”.
Ten schemat trzyma się czterech podstawowych obiektów, które obejmują większość CRM-ów małych zespołów, bez tworzenia potwora:
- Kontakty (i opcjonalnie organizacje) jako ludzie, z którymi rozmawiacie
- Transakcje jako okazje, które śledzicie przez pipeline
- Aktywności jako jeden zunifikowany dziennik zadań, spotkań, połączeń i notatek
- Uprawnienia jako praktyczne reguły, kto może widzieć i edytować co
Czyste raportowanie oznacza, że możesz wiarygodnie zobaczyć transakcje według etapu w tym tygodniu, współczynnik konwersji ze etapu na etap, średni czas w etapie, ostatnią aktywność na transakcję i otwarte zadania każdego sprzedawcy na dziś. Te raporty powinny mieć sens, gdy zespół rośnie z 3 do 15 osób.
Jeśli budujesz wewnętrzny CRM w narzędziu no-code jak AppMaster, to podejście utrzymuje bazę małą, a jednocześnie daje stabilne liczby do dashboardów i cotygodniowych przeglądów.
Zasady, by pozostać lekkim, nie ograniczając się
Lekki schemat CRM działa, gdy jasno odpowiada na jedno pytanie: gdzie przechowywać ten fakt? Jeśli ta sama „prawda” może być zapisana w dwóch miejscach, to zostanie, i twoje raporty będą dryfować.
Wybierz mały zestaw obiektów będących źródłem prawdy i spraw, by wszystko inne do nich wskazywało. Dla większości małych zespołów to oznacza Kontakty, Organizacje (opcjonalnie), Transakcje i Aktywności. Gdy potrzebujesz więcej szczegółów, dodaj nową tabelę zamiast upychać znaczenia do pojedynczego pola tekstowego, które stanie się szufladą śmieci.
Kilka reguł utrzymuje model prostym i elastycznym:
- Jeden fakt, jedno miejsce: numer telefonu należy do Kontaktu, wartość transakcji do Transakcji.
- Preferuj jawne tabele zamiast przeładowanych pól: historia etapów nie jest ciągiem rozdzielonym przecinkami.
- Trzymaj ID stabilne, a nazwy edytowalne: firmy zmieniają nazwy, nie klucze główne.
- Oddziel „status” od „typu”: zadanie może być jednocześnie „otwarte” i „call”.
- Zakładaj, że importy będą bałaganem: puste pola, duplikaty i dziwne formatowania są normalne.
Zaplanuj bałagan od pierwszego dnia, dodając kilka nudnych, ale potężnych pól: created_at, updated_at i proste external_id (lub import_source + import_key) w kluczowych tabelach. To daje bezpieczny sposób na ponowny import bez tworzenia duplikatów.
Konkretne przykład: importujesz arkusz, gdzie „Acme Inc.” pojawia się jako „ACME” w połowie wierszy. Jeśli Organization.name jest edytowalne, a Organization.id stabilne, możesz scalić rekordy później bez łamania istniejących transakcji i aktywności.
Kontakty i organizacje: najprostsza struktura, która działa
Lekki schemat CRM zaczyna się od jednej decyzji: czy śledzisz tylko osoby, czy osoby i firmy? Jeśli twój zespół sprzedaje do firm, prawie zawsze chcesz zarówno Kontakt (osoba), jak i Organizację (firma). Jeśli sprzedajesz konsumentom, możesz pominąć organizacje i trzymać wszystko jako kontakt.
Dla układu B2B trzymaj relację prostą: każdy kontakt należy do jednej głównej organizacji (nullable), a organizacja może mieć wiele kontaktów. To pokrywa większość przepływów pracy małych zespołów bez popychania cię w skomplikowane hierarchie kont.
Minimalne pola wymagane
Najszybszy sposób na bałagan danych to wymuszanie zbyt wielu pól. Dobry punkt wyjścia to:
- Kontakt:
id, imię i nazwisko (lubfirst_name+last_name),created_at - Organizacja:
id,name,created_at
Wszystko inne (stanowisko, strona www, adres, branża, źródło) może być opcjonalne. Możesz dodać reguły później, ale trudno wyczyścić bazę pełną placeholderów jak „N/A”.
E‑mail i telefon: unikalność bez bólu
Kusi, żeby zrobić e‑mail unikalnym. Działa to dobrze w B2C lub w CRM, który pełni też rolę systemu logowania. W małych zespołach B2B wspólne skrzynki (sales@, info@) i powtarzane numery telefonów są powszechne. Twarde reguły unikalności mogą blokować prawidłowe rekordy.
Praktyczny kompromis:
- Egzekwuj unikalność tylko wtedy, gdy wartość jest podana (i tylko jeśli pasuje do twojego przypadku użycia).
- Pozwól na duplikaty, ale pokaż miękkie ostrzeżenie w UI, gdy znajdziesz dopasowanie.
Jeśli potrzebujesz wielu e‑maili lub numerów, unikaj dodawania kolumn typu email_2 czy phone_3. Użyj osobnej tabeli (np. ContactMethod z polami type, value, is_primary). Raportowanie pozostaje czyste, a model skaluje się naturalnie.
Przykład: zespół spotyka Pat, który zmienia pracę w połowie kwartału. Dzięki powiązaniu Kontaktu z Organizacją możesz przenieść Pat do nowej firmy, zachować stare metody kontaktu dla historii, a raporty nadal poprawnie zliczają transakcje według firmy.
Transakcje i pipeline: struktura czytelna na dłuższą metę
Transakcja to jednostka prognozowania: jedna potencjalna sprzedaż z jasnym kolejnym krokiem. Trzymaj rekord transakcji mały i odnoś wszystko inne.
Zacznij od pól, które wyjaśnisz każdemu w zespole:
- Nazwa transakcji: krótki opis listowy
- Etap: referencja do etapu pipeline (nie wpisywana ręcznie)
- Wartość: oczekiwana kwota (i wybierz jedną walutę dla całego systemu)
- Właściciel: osoba odpowiedzialna za postęp
- Data zamknięcia: najlepsze obecne przypuszczenie, kiedy zamknie się sprzedaż
Dla relacji wybierz jednego głównego kontaktu przy transakcji. To utrzymuje raportowanie proste (np. przychód według kontaktu, współczynnik wygranych według segmentu). Jeśli czasem potrzebujesz więcej osób, dodaj tabelę deal_contacts, aby dołączać dodatkowe kontakty bez komplikowania każdego rekordu. Większość małych zespołów radzi sobie dobrze z 1 głównym kontaktem i opcjonalnymi uczestnikami.
Etapy to miejsce, gdzie CRM często się plącze. Nie przechowuj etapu jako tekstu. Przechowuj etapy jako dane referencyjne, aby móc zmienić nazwę etapu później bez psucia raportów. Minimalna tabela etapów może zawierać:
stage_idpipeline_idstage_namestage_orderis_closed(lub osobne flagi dla wygranych i przegranych)
Jeśli zespół jest mały, unikaj rozdzielania rekordów na „lead” i „deal”, chyba że naprawdę zarządzasz leadami inaczej. Prosta reguła: gdy masz realną okazję wartą śledzenia, to jest transakcja. Przedtem trzymaj to jako kontakt ze statusem „nowy” lub „nurture”. To utrzymuje pipeline czytelnym i zapobiega zanieczyszczaniu liczb przez pół‑utworzone transakcje.
Przykład: dwuosobowy zespół sprzedaży śledzi „Acme Renewal” jako transakcję należącą do Sama, etap „Proposal Sent”, wartość 12 000, data zamknięcia w przyszłym miesiącu. Główny kontakt to kupujący, a drugi kontakt został dodany jako zatwierdzający ze strony finansów. Raporty pozostają spójne, bo nazwy i kolejność etapów są zdefiniowane.
Aktywności: jeden model dla zadań, spotkań i notatek
Mały zespół nie potrzebuje osobnych tabel dla połączeń, e‑maili, spotkań i notatek. Jeden model Aktywności zwykle wystarcza i ułatwia korzystanie z CRM oraz raportowanie.
Jedna tabela Aktywności
Użyj jednego rekordu na rzecz, która się wydarzyła (lub powinna się wydarzyć). Daj mu proste pole type z małym zestawem wartości, np.: call, email, meeting, note, task. Trzymaj listę krótką, aby ludzie wybierali te same słowa za każdym razem.
Aby łączyć aktywności bez niejasności, stosuj jasne zasady:
- Jeśli chodzi o osobę (follow-up call, mail wprowadzający), powiąż z kontaktem.
- Jeśli dotyczy przesuwania przychodu (rozmowa cenowa, negocjacje), powiąż z transakcją.
- Jeśli naprawdę dotyczy obu, powiąż z obiema, ale traktuj transakcję jako priorytetową dla raportowania pipeline.
W praktyce Aktywność może mieć contact_id (nullable) i deal_id (nullable), plus opcjonalne owner_id (kto jest odpowiedzialny).
Znaczniki czasu przyjazne raportom
Trzymaj zarówno due_at, jak i completed_at. Odpowiadają na różne pytania. due_at mówi, co powinno się wydarzyć (planowanie i obciążenie pracą). completed_at mówi, co faktycznie się wydarzyło (wykonanie i czas cyklu).
Możesz wyprowadzić status bez osobnego pola: jeśli completed_at jest ustawione, to wykonane. Jeśli nie, to otwarte. To unika dodatkowych wartości statusu, które dryfują poza synchronizację.
Dla tekstu aktywności przechowuj jedno pole przeszukiwalne jak summary lub body. Unikaj nadmiernego strukturyzowania notatek na początku. Przykład: „Rozmowa z Mają: potwierdzony budżet, wysłać ofertę w piątek.” Dodaj pola specjalistyczne później tylko wtedy, gdy poczujesz realny ból.
Właścicielstwo i widoczność: trzymaj to praktycznie
Właściciel to ten, kto odpowiada za następny ruch. W lekkim schemacie CRM oznacza to zwykle jedno pole jak owner_user_id na transakcji (i często na kontaktach również).
Dwa znaczenia „właściciela” często się mieszają: przypisanie do użytkownika (konkretna osoba) i przypisanie do zespołu (grupa). Jeśli spróbujesz od dnia zero uczynić wszystko własnością zespołu, tracisz jasność, kto ma działać dziś.
Domyślny model, który działa dla większości małych zespołów: wszystko widoczne dla wszystkich, ale każda transakcja ma dokładnie jednego właściciela. Współpraca pozostaje łatwa, a unikasz skrajnych przypadków z uprawnieniami, gdy ktoś musi zastąpić kolegę.
Gdy potrzebujesz surowszej widoczności, trzymaj to jako pojedynczy przełącznik, nie złożoną macierz. Na przykład dodaj pole visibility na transakcjach i aktywnościach z wartościami public i private, gdzie private oznacza „widoczne tylko dla właściciela (i adminów)”.
Potrzebujesz zespołów lub terytoriów tylko wtedy, gdy jedno z poniższych jest prawdą:
- Masz oddzielne grupy, które nie powinny widzieć swoich nawzajem transakcji.
- Raportujesz wyniki według zespołu i ludzie zmieniają zespoły.
- Menedżerowie potrzebują dostępu do swojej grupy, ale nie do całej firmy.
- Przypisujesz leady do wspólnej kolejki, zanim sprzedawca je przyjmie.
Właścicielstwo wpływa na raportowanie. Jeśli chcesz czystych liczb „według sprzedawcy”, raportuj według aktualnego owner_user_id na transakcji. Jeśli chcesz też sumowania według zespołu, dodaj owner_team_id (lub wyprowadź z profilu właściciela), ale bądź explicit, który jest źródłem prawdy.
Przykład: dwóch sprzedawców dzieli skrzynkę. Nowa transakcja zaczyna nieprzypisana z owner_user_id = null i owner_team_id = Sales. Gdy Alex ją przejmie, ustaw owner_user_id = Alex (zachowaj team jako Sales). Pipeline pozostaje czytelny, a sumy zespołowe nadal działają.
Projekt uprawnień: wystarczająco kontroli bez komplikacji
Zacznij od prostego RBAC
Uprawnienia działają najlepiej, gdy rozdzielisz trzy pomysły: role (kto), zasoby (co) i akcje (co mogą robić). To jest kontrola dostępu oparta na rolach (RBAC) i pozostaje zrozumiała w miarę wzrostu zespołu.
Trzymaj zasoby blisko podstawowych obiektów: Kontakty, Organizacje, Transakcje, Aktywności i może Pipelines (jeśli etapy są edytowalne). Zdefiniuj mały, spójny zestaw akcji dla nich: view, create, edit, delete, export.
Export warto oddzielić. Wiele zespołów zgadza się na szerokie prawa do przeglądania, ale chce ograniczyć masowe pobieranie danych.
Uprawnienia na poziomie obiektu są najłatwiejszym miejscem na start: „Czy ta rola może w ogóle edytować transakcje?” Dla większości małych zespołów to wystarcza na wiele miesięcy. Reguły na poziomie rekordu (dla pojedynczego kontaktu lub transakcji) to miejsce, gdzie pojawia się złożoność — dodaj je tylko wtedy, gdy jest realna potrzeba.
Praktyczny pierwszy krok to pojedyncza reguła właścicielska: każdy rekord ma owner_user_id, a nie‑admini mogą edytować tylko to, czego są właścicielami. Jeśli potrzebujesz jeszcze jednej warstwy, dodaj team_id i pozwól na widok zespołowy, pozostawiając edycję tylko właścicielowi.
Reguły na poziomie rekordu, gdy są naprawdę potrzebne
Dodaj reguły na poziomie rekordu dla przypadków takich jak:
- Handlowcy nie powinni widzieć transakcji innych handlowców
- Support może przeglądać transakcje, ale nigdy ich nie edytować
- Menedżerowie mogą wszystko przeglądać i reasignować właścicieli
Trzymaj potrzeby audytu lekkimi, ale realnymi. Dodaj created_at, created_by, updated_at i updated_by do każdej głównej tabeli. Jeśli potrzebujesz głębszej historii później, dodaj małą tabelę audit_log z: typem obiektu, id rekordu, akcją, kim, kiedy i krótkim JSONem zmienionych pól.
Krok po kroku: zbuduj schemat w weekend
Najłatwiej to zrobić, gdy potraktujesz to jak mały produkt: najpierw zdefiniuj dane, udowodnij, że działają na prawdziwych wpisach, a potem zbuduj ekrany.
Dzień 1: zamroź model danych
Zacznij od szybkiego szkicu ERD na papierze lub tablicy. Trzymaj liczbę tabel małą, ale bądź jasny co do powiązań: kontakt należy do organizacji (opcjonalnie), transakcja należy do pipeline i ma właściciela, aktywność może odnosić się do kontaktu i/lub transakcji.
Następnie zrób podstawy w kolejności:
- Zdefiniuj obiekty i relacje: kontakty, organizacje, transakcje, aktywności, użytkownicy/role, plus małe tabele lookup jeśli potrzebne.
- Zdefiniuj pola wymagane i domyślne: ustaw
created_at,owner_idi kluczowe nazwy jako wymagane; ustaw domyśły dla etapu i waluty jeśli używasz kwot. - Zdefiniuj enumy lub tabele lookup: etapy transakcji i typy aktywności, aby raportowanie pozostało spójne.
- Dodaj indeksy dla częstych filtrów:
owner_id, etap,due_at,created_ati klucze obce, po których filtrujesz codziennie. - Przetestuj na 20 prawdziwych rekordach: użyj rzeczywistych imion, dat i chaotycznych notatek, aby zobaczyć, co pęka.
Dzień 2: sprawdź, czy raportuje poprawnie
Zanim zbudujesz formularze, zapisz 6–8 pytań, które zespół zadaje co tydzień. Na przykład: „Transakcje w Negotiation według właściciela”, „Zaległe aktywności”, „Nowe kontakty w tym miesiącu”, „Wygrany przychód miesięcznie”. Jeśli pytanie wymaga skomplikowanych joinów lub wyjątków, popraw schemat teraz.
Prosty scenariusz testowy pomaga: dodaj 3 kontakty w jednej firmie, 2 transakcje na różnych etapach i 6 aktywności rozłożonych między nie (połączenie, spotkanie, dwa zadania i dwie notatki). Sprawdź, czy możesz odpowiedzieć, kto jest właścicielem, co jest następne i co się zmieniło w zeszłym tygodniu bez zgadywania.
Gdy dane są solidne, buduj UI i automatyzacje na końcu. Pospieszysz się i nie będziesz musiał przepisywać historii później, aby raporty pasowały do rzeczywistości.
Typowe błędy, które psują raportowanie
Chaotyczne raportowanie zwykle zaczyna się od „szybkich poprawek”, które dziś wydają się szybsze, ale kosztują cię w każdy następny tydzień. Lekki schemat CRM działa najlepiej, gdy twoje dane mają wyraźne kształty i kilka reguł, których zespół rzeczywiście przestrzega.
Typową pułapką jest upychanie wszystkiego do jednej tabeli „customer”. Brzmi prosto, dopóki nie będziesz musiał odpowiedzieć na podstawowe pytania jak „Ile transakcji jest przypisanych do jednej firmy?” lub „Która osoba zmieniła pracę?”. Oddziel ludzi (kontakty) i firmy (organizacje) i połącz je.
Kolejnym zabójcą raportów jest pozwolenie, by etapy transakcji były tekstem wolnym. Jeśli jedna osoba wpisze „Negotiation”, a inna „negocjowanie”, wykres pipeline już jest błędny. Użyj stałej listy etapów (lub tabeli etapów), aby każda transakcja wskazywała na ten sam zestaw.
Unikaj upychania wielu wartości w jedno pole. E‑maily czy numery telefonów rozdzielone przecinkami utrudniają wyszukiwanie, deduplikację i eksport. Jeśli naprawdę potrzebujesz wielu wartości, przechowuj je jako osobne wiersze (np. jeden email na rekord w tabeli podrzędnej).
Aktywności robią się chaotyczne, gdy daty są niejasne. Jedno pole „date” nie powie, czy zadanie było zaległe w ostatni piątek, czy ukończone wtedy. Rozdziel te pojęcia, abyś mógł raportować o zaległościach i wykonaniach poprawnie.
Oto szybka lista „zapisz przyszłemu sobie”:
- Rozdziel kontakty i organizacje, a następnie je połącz
- Używaj identyfikatorów etapów, nie wpisywanych nazw etapów
- Jedna wartość na pole; użyj tabeli podrzędnej dla wielu wartości
- Trzymaj
due_aticompleted_atjako oddzielne pola - Zacznij od prostych ról; dodaj reguły na poziomie rekordu dopiero po zobaczeniu faktycznych workflow
Przykład: jeśli zespół loguje połączenia jako notatki i później oznacza je jako „zrobione” edytując to samo pole, nie będziesz mógł raportować, ile trwały follow‑upy. Z oddzielnymi polami ten raport jest prosty.
Szybka lista kontrolna przed zatwierdzeniem schematu
Zanim zbudujesz ekrany, automatyzacje i dashboardy, zrób szybki przegląd pod kątem raportowania i reguł. Lekki schemat CRM pozostaje lekki tylko wtedy, gdy możesz odpowiedzieć na typowe pytania bez hacków lub jednorazowych pól.
Przejdź przez te kontrole używając rzeczywistych przykładowych danych (nawet 20 kontaktów i 10 transakcji wystarczy). Jeśli utkniesz, zwykle oznacza to brakujące pole, niespójny picklist lub zbyt luźną relację.
5 kontroli, które łapią większość problemów
- Podstawy raportowania: czy możesz grupować transakcje według etapu, właściciela i miesiąca zamknięcia bez zgadywania, którego pola daty użyć?
- Zarządzanie pracą: czy możesz wygenerować „zaległe aktywności według właściciela” w jednym raporcie, gdzie zaległe opiera się na jednej dacie due i jasnym statusie zrobienia?
- Kontakt do organizacji: czy kontakt może istnieć bez organizacji i czy można go później powiązać bez łamania historii (e‑maile, notatki, udział w transakcjach)?
- Spójność: czy etapy i typy aktywności pochodzą z ustalonej listy, aby nie kończyć z „Follow up”, „Follow-up” i „Followup” jako trzema wartościami?
- Bezpieczeństwo: czy możesz ograniczyć, kto może usuwać rekordy lub eksportować listy, bez blokowania normalnych aktualizacji jak przesunięcie transakcji do następnego etapu?
Jeśli potrafisz odpowiedzieć „tak” na wszystkie pięć, jesteś w dobrym miejscu. Jeśli nie, napraw to teraz, póki schemat jest mały.
Praktyczna wskazówka: zdefiniuj etapy i typy aktywności raz (jako tabelę lub enum) i używaj ich wszędzie, aby każdy ekran i proces korzystał z tych samych wartości.
Realistyczny przykład dla małego zespołu i następne kroki
Pięcioosobowa agencja to dobry test dla lekkiego schematu CRM. Zespół jest zajęty, leady przychodzą zewsząd i nikt nie chce pilnować danych. Wyobraź sobie: 1 admin, 2 handlowców, 1 szef operacji i 1 członek z prawami tylko do odczytu (założyciel, który tylko sprawdza liczby).
Nowe zapytanie przychodzi (formularz lub e‑mail): „Potrzebny refresh strony, budżet 15k, czas 6 tygodni.” Reguła jest prosta: utwórz jedną organizację (jeśli to firma) i jeden kontakt (osobę). Następnie stwórz transakcję powiązaną z organizacją, z kontaktem jako głównym kontaktem przy transakcji.
Aby utrzymać szybkość, używają małej checklisty przy przyjęciu:
- Jeśli domena lub nazwa firmy pasuje do istniejącej organizacji, użyj jej ponownie.
- Jeśli e‑mail osoby istnieje, użyj istniejącego kontaktu.
- Zawsze twórz transakcję przy realnym zamiarze zakupu.
- Wstaw oryginalną wiadomość do opisu transakcji.
- Dodaj źródło (referral, form, outbound) jako jedno pole.
Aktywności zapobiegają zgubionym rozmowom, bo każdy następny krok staje się datowanym elementem przypisanym do osoby. Gdy sprzedaż ma call discovery, zapisują jedną aktywność jako spotkanie i od razu dodają kolejną: telefon za dwa dni. Jeśli operacje potrzebują detali do wyceny, tworzą zadanie na tej samej transakcji, aby wszystko było w jednym miejscu.
Role pozostają praktyczne: Admin może edytować wszystko i zarządzać ustawieniami, Sales może tworzyć i aktualizować kontakty, transakcje i swoje aktywności, Ops może aktualizować pola związane z realizacją i aktywnościami, a Read‑only może przeglądać pipeline i raporty bez zmian danych.
Jeśli chcesz szybko zamienić to w działające narzędzie wewnętrzne, AppMaster (appmaster.io) jest prostą opcją: możesz zamodelować schemat w Data Designer (PostgreSQL), dodać reguły workflow w edytorze Business Process, zbudować prostą skrzynkę leadów i stronę transakcji, a potem wdrożyć do AppMaster Cloud lub swojej własnej chmury, gdy będziesz gotowy do udostępnienia zespołowi.
FAQ
Zacznij od czterech podstawowych obiektów: Kontakty (ludzie), Organizacje (opcjonalne firmy), Transakcje (opportunitites) i Aktywności (jeden zunifikowany dziennik). Jeśli każde pytanie, które zadaje zespół, można przypisać do jednego z nich, pozostaniesz szybki bez psucia raportów.
Śledź organizacje, jeśli sprzedajesz B2B i potrzebujesz raportów według firmy, lub gdy wiele kontaktów należy do tego samego klienta. Pomiń organizacje dla B2C lub kiedy jedynym obiektem sprzedaży jest osoba i trzymaj wszystko w Kontaktach.
Unikaj pola tekstowego dla etapów, ponieważ rozbieżności w pisowni i nazewnictwie zepsują kokpity. Użyj stałej listy (tabeli etapów) i przechowuj stage_id na każdej transakcji, aby móc zmienić nazwę etapu później bez modyfikowania danych historycznych.
Utrzymuj wymagane pola minimalne: identyfikator, nazwa i created_at dla kontaktów i organizacji, oraz podstawowe pola transakcji jak etap, właściciel, wartość i data zamknięcia. Pola opcjonalne są w porządku — za wiele wymaganych pól prowadzi do śmieciowych wartości jak „N/A”.
Nie blokuj duplikatów na twardo, chyba że jesteś pewien, że pasuje to do twojego procesu. Praktyczny domyślny wybór to pozwolić na duplikaty, ale pokazywać ostrzeżenie, gdy znaleziono podobny e‑mail lub telefon, oraz mieć external_id (lub klucze importu), aby ponowne importy nie tworzyły dodatkowych rekordów.
Użyj jednej tabeli Aktywności z małym zestawem typów jak call, email, meeting, note, task. Dzięki temu „ostatni kontakt”, zaległa praca i historia aktywności będą spójne, bo wszystko dzieli te same znaczniki czasu i strukturę.
Przechowuj zarówno due_at, jak i completed_at, bo odpowiadają na różne pytania. due_at służy do planowania i raportów o zaległościach, a completed_at pokazuje wykonanie i czas cyklu; łączenie ich sprawia, że oba raporty są zawodné.
Domyślnie jedna główna osoba kontaktowa na transakcję utrzymuje raporty czytelnymi, a interfejs prostym. Jeśli czasem potrzebujesz dodatkowych osób, dodaj tabelę deal_contacts jako relację wielu do wielu, zamiast od razu komplikować model.
Dobry domyślny model: wszystko widoczne dla wszystkich, ale każda transakcja ma dokładnie jednego właściciela odpowiedzialnego za następny krok. Jeśli później potrzebujesz prywatności, dodaj proste pole visibility z wartościami public/private zamiast budować złożoną macierz uprawnień od razu.
Najpierw zamodeluj tabele, a potem przetestuj na prawdziwych danych przed budową ekranów. Jeśli nie możesz łatwo odpowiedzieć na pytania typu „transakcje według etapu”, „zaległe aktywności” czy „ostatni kontakt na transakcję”, popraw schemat póki jest mały.


