10 thg 8, 2025·8 phút đọc

Schema CRM nhẹ cho đội nhỏ, giữ mọi thứ đơn giản

Xây một schema CRM nhẹ giữ Contacts, Deals, Activities và quyền đơn giản, vẫn đảm bảo báo cáo tin cậy và quy trình hàng ngày.

Schema CRM nhẹ cho đội nhỏ, giữ mọi thứ đơn giản

Vấn đề schema CRM nhẹ này nên giải quyết

Một đội nhỏ cần CRM trả lời nhanh các câu hỏi hàng ngày: Chúng ta đang nói chuyện với ai, chúng ta đang cố đóng cái gì, chuyện gì vừa xảy ra, và bước tiếp theo là gì. Đó là nhiệm vụ thực sự của một schema CRM nhẹ. Những thứ không hỗ trợ các câu hỏi đó thường là nhiễu.

Đội nhỏ hiếm khi cần cấu trúc account sâu, hàng chục đối tượng tùy chỉnh, hay mô hình chấm điểm phức tạp. Họ cần quyền sở hữu rõ ràng, lịch sử chạm đơn giản, và một pipeline mà mọi người hiểu theo cùng một cách.

"Đơn giản" vỡ khi nó phụ thuộc vào text tự do và bản sao chép. Nếu một người viết stage là "Negotiation" và người khác viết "negotiating", báo cáo sẽ trở thành phỏng đoán. Nếu activities nằm trong các bảng riêng cho cuộc gọi, cuộc họp và ghi chú, bạn sẽ có nhiều trường ngày và không có giá trị “lần chạm cuối” đáng tin cậy.

Schema này giữ bốn đối tượng lõi bao phủ hầu hết CRM đội nhỏ mà không biến thành quái vật:

  • Contacts (và tùy chọn Organizations) là những người bạn liên hệ
  • Deals là những cơ hội bạn theo dõi trong pipeline
  • Activities là nhật ký thống nhất cho tasks, meetings, calls và notes
  • Permissions là các quy tắc thực tế về ai xem và chỉnh sửa gì

Báo cáo sạch nghĩa là bạn có thể thấy đáng tin cậy các deal theo stage tuần này, tỷ lệ chuyển đổi từ stage sang stage, thời gian trung bình ở mỗi stage, hoạt động cuối cùng cho mỗi deal, và task mở của từng đại diện cho hôm nay. Những báo cáo đó vẫn có ý nghĩa khi đội tăng từ 3 người lên 15.

Nếu bạn xây CRM nội bộ trong công cụ no-code như AppMaster, cách tiếp cận này giữ database nhỏ mà vẫn cho số liệu ổn định cho dashboard và buổi review hàng tuần.

Nguyên tắc để giữ nhẹ mà không bị bó chặt

Schema CRM nhẹ hiệu quả khi nó trả lời rõ một câu hỏi: sự thật này nằm ở đâu? Nếu cùng một “sự thật” có thể lưu ở hai nơi, nó sẽ được lưu ở hai nơi, và báo cáo của bạn sẽ trôi.

Chọn một tập nhỏ các đối tượng nguồn sự thật và làm cho mọi thứ khác trỏ về chúng. Với hầu hết đội nhỏ, đó là Contacts, Organizations (tùy chọn), Deals và Activities. Khi cần chi tiết hơn, thêm bảng mới thay vì nhồi nhét ý nghĩa vào một trường text trở thành ngăn kéo rác.

Một vài quy tắc giữ mô hình đơn giản và linh hoạt:

  • Một sự thật, một nơi: số điện thoại thuộc về Contact, giá trị deal thuộc về Deal.
  • Ưu tiên bảng rõ ràng hơn các trường quá tải: lịch sử stage không phải là chuỗi phân cách dấu phẩy.
  • Giữ ID ổn định và tên có thể sửa: người ta đổi tên công ty, họ không đổi khóa chính.
  • Tách “status” ra khỏi “type”: một task có thể là “open” và đồng thời là “call”.
  • Giả định import sẽ lộn xộn: trống, trùng, và định dạng lạ là bình thường.

Lên kế hoạch cho dữ liệu lộn xộn ngay từ ngày đầu bằng vài trường nhàm nhưng mạnh: created_at, updated_at, và một external_id đơn giản (hoặc import_source + import_key) trên các bảng lõi. Điều đó cho bạn cách an toàn để tái import mà không tạo bản sao.

Một ví dụ cụ thể: bạn import spreadsheet nơi “Acme Inc.” xuất hiện là “ACME” ở một nửa dòng. Nếu Organization.name có thể sửa và Organization.id ổn định, bạn có thể gộp bản ghi sau mà không phá các deals và activities hiện có.

Contacts và organizations: cấu trúc đơn giản hiệu quả

Schema CRM nhẹ bắt đầu với một quyết định: bạn chỉ theo dõi người, hay người + công ty? Nếu đội bạn bán cho doanh nghiệp, hầu như luôn muốn cả Contact (người) và Organization (công ty). Nếu bạn bán cho người tiêu dùng, có thể bỏ qua organizations và giữ mọi bản ghi là contact.

Với cấu hình B2B, giữ quan hệ đơn giản: mỗi contact thuộc về một organization chính (nullable), và một organization có thể có nhiều contacts. Điều này đáp ứng hầu hết quy trình đội nhỏ mà không đẩy bạn vào cấu trúc account phức tạp.

Giữ các trường bắt buộc ở mức tối thiểu

Cách nhanh nhất để dữ liệu lộn xộn là bắt quá nhiều trường là bắt buộc. Một baseline tốt là:

  • Contact: id, tên (hoặc first_name + last_name), created_at
  • Organization: id, name, created_at

Mọi thứ khác (chức danh, website, địa chỉ, ngành, nguồn) có thể để tùy chọn. Bạn có thể thêm quy tắc sau, nhưng khó mà dọn database đầy giá trị giữ chỗ như "N/A".

Email và điện thoại: duy nhất nhưng đừng quá khắt khe

Rất dễ muốn đặt email là duy nhất. Điều đó tốt cho B2C hoặc CRM cũng là hệ thống đăng nhập. Ở B2B nhỏ, hộp thư chia sẻ (sales@, info@) và số điện thoại dùng chung là phổ biến. Luật duy nhất cứng có thể chặn bản ghi hợp lệ.

Một thỏa hiệp thực tế:

  • Áp dụng tính duy nhất chỉ khi giá trị tồn tại (và chỉ nếu phù hợp trường hợp của bạn).
  • Cho phép trùng, nhưng hiển thị cảnh báo mềm trong UI khi tìm thấy khớp.

Nếu cần nhiều email hoặc số điện thoại, tránh thêm cột như email_2 hay phone_3. Dùng bảng riêng (ví dụ ContactMethod với type, value, is_primary). Báo cáo sạch và mô hình mở rộng tự nhiên.

Ví dụ: team gặp Pat, người đổi việc giữa quý. Với Contact liên kết Organization, bạn có thể chuyển Pat sang công ty mới, giữ các phương thức liên hệ cũ cho lịch sử, và báo cáo vẫn tính deals theo công ty đúng.

Deals và pipelines: cấu trúc dễ đọc

Deal là đơn vị dự báo: một khả năng mua với bước tiếp theo rõ ràng. Giữ record deal nhỏ và tham chiếu mọi thứ khác.

Bắt đầu với các trường bạn có thể giải thích cho mọi người trong đội:

  • Deal name: nhãn ngắn hiển thị dễ hiểu
  • Stage: tham chiếu tới một pipeline stage (không nhập tay)
  • Value: số tiền dự kiến (và chọn một đơn vị tiền cố định cho toàn hệ thống)
  • Owner: người chịu trách nhiệm thúc đẩy
  • Close date: dự đoán tốt nhất hiện tại về khi nào sẽ đóng

Về quan hệ, chọn một contact chính cho deal. Điều này giữ báo cáo đơn giản (ví dụ doanh thu theo contact, tỷ lệ thắng theo phân khúc). Nếu thỉnh thoảng cần nhiều người liên quan, thêm bảng deal_contacts để gắn thêm contacts mà không biến mọi deal thành many-to-many phức tạp. Hầu hết đội nhỏ ổn với 1 primary contact kèm người tham gia tùy chọn.

Stage là nơi CRM hay lộn xộn. Đừng lưu stage bằng text tự do. Lưu stages như dữ liệu tham chiếu để bạn có thể đổi tên stage sau này mà không phá báo cáo. Một bảng stage tối thiểu có thể gồm:

  • stage_id
  • pipeline_id
  • stage_name
  • stage_order
  • is_closed (hoặc flag riêng cho won và lost)

Nếu đội bạn nhỏ, tránh tách record thành “lead” và “deal” trừ khi bạn quản lý lead khác thật sự. Một quy tắc đơn giản: khi bạn có cơ hội thực sự đáng theo dõi, đó là deal. Trước đó, giữ nó như contact với status như “new” hoặc “nurture”. Điều này giữ pipeline dễ đọc và ngăn các deals nửa vời làm nhiễu số liệu.

Ví dụ: đội bán 2 người theo dõi “Acme Renewal” như một deal do Sam quản lý, stage “Proposal Sent”, giá trị 12,000, close date tháng sau. Contact chính là người mua, và thêm contact thứ hai làm người duyệt tài chính. Báo cáo vẫn nhất quán vì tên và thứ tự stage được cố định.

Activities: một mô hình cho tasks, meetings và notes

Xây dựng schema CRM nhanh
Mô hình Contacts, Deals và Activities trong vài phút với schema PostgreSQL sạch.
Dùng thử AppMaster

Đội nhỏ không cần bảng riêng cho calls, emails, meetings và notes. Một Activity thường là đủ, và làm CRM dễ dùng hơn và dễ báo cáo hơn.

Một bảng Activity duy nhất

Dùng một record cho mỗi việc đã xảy ra (hoặc cần diễn ra). Cho nó trường type đơn giản với tập giá trị cố định nhỏ, ví dụ: call, email, meeting, note, task. Giữ danh sách ngắn để mọi người chọn cùng một từ.

Để liên kết activities không nhầm lẫn, dùng quy tắc rõ ràng:

  • Nếu liên quan tới một người (gọi follow-up, email giới thiệu), liên kết tới contact.
  • Nếu liên quan tới doanh thu (gọi giá, họp đàm phán), liên kết tới deal.
  • Nếu thật sự liên quan cả hai, liên kết cả hai, nhưng coi deal là chính cho báo cáo pipeline.

Trong thực tế, Activity có thể có contact_id (nullable) và deal_id (nullable), cùng owner_id tùy chọn (người chịu trách nhiệm).

Timestamps thân thiện cho báo cáo

Giữ cả due_atcompleted_at. Chúng trả lời các câu hỏi khác nhau. due_at cho biết điều gì nên diễn ra (lên kế hoạch và tải công việc). completed_at cho biết điều gì đã xảy ra (thực thi và thời gian chu kỳ).

Bạn có thể suy ra trạng thái mà không cần trường riêng: nếu completed_at có giá trị thì đã xong. Nếu không, là mở. Điều này tránh các giá trị trạng thái thừa dễ lệch.

Với nội dung activity, lưu một trường có thể tìm kiếm như summary hoặc body. Tránh cấu trúc hóa ghi chú quá sớm. Ví dụ: “Call with Maya: confirmed budget, send proposal Friday.” Chỉ thêm trường chuyên biệt khi bạn thực sự thấy đau đầu.

Quyền sở hữu và hiển thị: giữ thực tế

Quyền sở hữu là người chịu trách nhiệm bước tiếp theo. Trong schema CRM nhẹ, thường có một trường như owner_user_id trên deal (và thường trên contacts).

Hai ý nghĩa của “owner” hay bị lẫn: phân công người (một cá nhân) và phân công nhóm (team). Nếu bạn cố làm mọi thứ thuộc về team ngay từ đầu, bạn mất rõ ai phải hành động hôm nay.

Một mặc định hiệu quả cho hầu hết đội nhỏ: mọi thứ hiển thị cho tất cả, nhưng mỗi deal có đúng một owner. Cộng tác vẫn dễ, và bạn tránh các edge case quyền khi ai đó cần cover cho đồng đội.

Khi cần kiểm soát hiển thị mạnh hơn, giữ nó như một công tắc đơn, không phải ma trận phức tạp. Ví dụ, thêm trường visibility trên deals và activities với giá trị như publicprivate, trong đó private nghĩa là “chỉ owner (và admins) thấy được”.

Bạn chỉ cần teams hoặc territories khi một trong các điều sau đúng:

  • Bạn có các nhóm riêng không nên thấy deals của nhau.
  • Bạn báo cáo hiệu suất theo team và người có thể chuyển giữa team.
  • Quản lý cần truy cập nhóm của họ, nhưng không cả công ty.
  • Bạn phân bổ leads vào hàng đợi chung trước khi đại diện nhận.

Quyền sở hữu ảnh hưởng báo cáo. Nếu muốn số liệu “theo rep” sạch, báo cáo theo owner_user_id hiện tại trên deal. Nếu cũng muốn tổng hợp “theo team”, thêm owner_team_id (hoặc suy ra từ hồ sơ owner), nhưng phải rõ nguồn sự thật là trường nào.

Ví dụ: hai đại diện chia sẻ inbox. Deal mới bắt đầu chưa gán với owner_user_id = nullowner_team_id = Sales. Khi Alex nhận, đặt owner_user_id = Alex (giữ team là Sales). Pipeline vẫn dễ đọc, và tổng team còn hoạt động.

Thiết kế quyền: đủ kiểm soát mà không phức tạp

Thiết kế bảng đúng cách
Dùng Data Designer để cố định quan hệ và giữ báo cáo nhất quán khi bạn mở rộng.
Mô hình schema

Bắt đầu với RBAC đơn giản

Quyền hiệu quả khi bạn tách ba ý tưởng: roles (ai), resources (cái gì), và actions (họ có thể làm gì). Đó là role-based access control (RBAC), và nó dễ hiểu khi đội bạn lớn dần.

Giữ resources gần các đối tượng lõi: Contacts, Organizations, Deals, Activities, và có thể Pipelines (nếu stages có thể chỉnh). Định nghĩa một tập actions nhỏ, nhất quán: view, create, edit, delete, export.

Export đáng tách riêng. Nhiều đội ok với quyền xem rộng, nhưng muốn hạn chế việc kéo dữ liệu hàng loạt.

Quyền ở mức đối tượng là nơi dễ bắt đầu: “Role này có thể edit deals không?” Với hầu hết đội nhỏ, điều đó đủ trong vài tháng. Quy tắc ở mức record (mỗi contact hoặc deal) mới là nơi phức tạp xuất hiện, nên chỉ thêm khi thực sự cần.

Bước thực tế đầu tiên là một quy tắc ownership: mỗi record có owner_user_id, và non-admin chỉ có thể chỉnh những gì họ sở hữu. Nếu cần thêm một lớp, thêm team_id và cho phép xem cả team trong khi chỉnh vẫn chỉ owner mới được.

Record-level rules khi thật sự cần

Thêm quyền theo record cho các trường hợp như:

  • Sales reps không nên thấy deals của nhau
  • Support có thể xem deals nhưng không chỉnh
  • Managers có thể xem tất cả và chuyển owner

Giữ nhu cầu audit nhẹ nhưng thực. Thêm created_at, created_by, updated_at, và updated_by cho mỗi bảng chính. Nếu cần lịch sử sâu hơn sau này, thêm bảng audit_log nhỏ với: object type, record id, action, who, when, và một JSON ngắn các trường đã thay đổi.

Từng bước: xây schema trong một cuối tuần

Tạo CRM nhẹ
Biến mô hình 4 bảng này thành CRM nội bộ hoạt động được mà không viết code.
Bắt đầu xây dựng

Dễ nhất là coi nó như một sản phẩm nhỏ: xác định dữ liệu trước, kiểm tra với dữ liệu thực, rồi xây giao diện.

Ngày 1: khóa model dữ liệu

Bắt đầu với một phác thảo ERD nhanh trên giấy hoặc bảng. Giữ số bảng nhỏ, nhưng rõ ràng các liên kết: contact thuộc organization (tùy chọn), deal thuộc pipeline và có owner, activity có thể liên quan contact và/hoặc deal.

Rồi làm những thứ cơ bản theo thứ tự:

  • Định nghĩa đối tượng và quan hệ: contacts, organizations, deals, activities, users/roles, cùng vài bảng tra cứu nhỏ nếu cần.
  • Định nghĩa các trường bắt buộc và mặc định: làm created_at, owner_id, và tên chính bắt buộc; đặt mặc định cho stage và currency nếu dùng amounts.
  • Định nghĩa enum hoặc bảng tra cứu: deal stages và activity types để báo cáo nhất quán.
  • Thêm index cho bộ lọc thường dùng: owner_id, stage, due_at, created_at, và foreign keys bạn lọc hàng ngày.
  • Thử với 20 bản ghi thực: dùng tên thật, ngày và notes lộn xộn để xem chỗ nào hỏng.

Ngày 2: chứng minh báo cáo sạch

Trước khi làm form, viết ra 6-8 câu hỏi đội bạn hỏi mỗi tuần. Ví dụ: “Deals in Negotiation by owner”, “Overdue activities”, “New contacts this month”, “Won revenue by month”. Nếu câu hỏi cần join phức tạp hoặc ngoại lệ, sửa schema bây giờ.

Một kịch bản thử đơn giản hữu ích: thêm 3 contacts ở một công ty, 2 deals ở các stage khác nhau, và 6 activities phân bố (một call, một meeting, hai tasks, hai notes). Rồi kiểm tra xem bạn có trả lời được ai là owner, bước tiếp theo là gì, và gì đã thay đổi tuần trước mà không đoán mò không.

Khi dữ liệu ổn, xây UI và automation sau cùng. Bạn sẽ tiến nhanh hơn và không phải viết lại lịch sử sau để báo cáo khớp thực tế.

Sai lầm phổ biến làm báo cáo lộn xộn

Báo cáo lộn xộn thường bắt đầu từ các “sửa nhanh” cảm thấy nhanh hôm nay nhưng tốn chi phí mỗi tuần sau. Schema CRM nhẹ hiệu quả khi dữ liệu có hình dạng rõ và vài quy tắc đội thực sự tuân theo.

Cạm bẫy phổ biến là bắt mọi thứ vào một bảng “customer”. Nghe có vẻ đơn giản cho đến khi bạn cần trả lời các câu hỏi cơ bản như “Bao nhiêu deals liên kết với một công ty?” hoặc “Ai đã đổi việc?”. Tách people (contacts) và companies (organizations) ra và nối chúng.

Một killer khác là để stages deal là text tự do. Nếu người gõ “Negotiation” và người khác gõ “negotiating”, biểu đồ pipeline đã sai. Dùng danh sách stage cố định (hoặc bảng stage) để mọi deal trỏ cùng một tập giá trị.

Tránh nhồi nhiều giá trị vào một trường. Email phân cách dấu phẩy hay số điện thoại nhiều giá trị khiến tìm kiếm, dedupe và export trở nên đau đớn. Nếu thực sự cần nhiều giá trị, lưu chúng dưới dạng nhiều hàng (ví dụ, một email cho mỗi bản ghi trong bảng con).

Activities lộn xộn khi ngày không rõ. Một trường “date” không cho biết đó là do nhiệm vụ quá hạn hay hoàn thành vào thứ Sáu trước. Tách các khái niệm đó ra để báo cáo công việc quá hạn và công việc hoàn thành chính xác.

Đây là checklist nhanh "cứu tương lai bạn":

  • Tách contacts và organizations, rồi liên kết chúng
  • Dùng stage ID, không dùng tên stage gõ tay
  • Một giá trị mỗi trường; dùng bảng con cho nhiều giá trị
  • Giữ due_atcompleted_at là hai trường riêng
  • Bắt đầu với roles đơn giản; thêm quy tắc theo record chỉ khi thấy workflow thực tế

Ví dụ: nếu team ghi cuộc gọi như ghi chú rồi sau đó đánh dấu “done” bằng cách sửa cùng một trường, bạn không thể báo cáo thời gian theo dõi. Với các trường tách biệt, báo cáo đó trở nên đơn giản.

Checklist nhanh trước khi chốt schema

Sửa stages cho đúng
Định nghĩa các stage là dữ liệu tham chiếu để dashboard luôn chính xác.
Thiết lập pipeline

Trước khi làm screens, automations và dashboards, chạy một lần kiểm tra báo cáo và quy tắc. Schema CRM nhẹ chỉ giữ được nhẹ khi bạn trả lời các câu hỏi phổ biến mà không cần hack hay trường một lần.

Chạy các kiểm tra này với dữ liệu mẫu thực (20 contacts và 10 deals là đủ). Nếu bị vướng, thường là thiếu trường, picklist không nhất quán, hoặc quan hệ quá lỏng.

5 kiểm tra bắt lỗi phổ biến

  • Basics báo cáo: bạn có thể nhóm deals theo stage, theo owner và theo tháng đóng mà không phải đoán trường ngày?
  • Quản lý công việc: bạn có lọc “activities quá hạn theo owner” trong một báo cáo, nơi quá hạn dựa trên một due date duy nhất và trạng thái done rõ ràng không?
  • Contact tới organization: contact có thể tồn tại không có organization, và có thể liên kết sau mà không phá lịch sử (emails, notes, tham gia deal)?
  • Nhất quán: stages và activity types có từ danh sách cố định không, để bạn không có “Follow up”, “Follow-up” và “Followup” là ba giá trị khác nhau?
  • An toàn: bạn có thể hạn chế ai xóa record hoặc export danh sách mà không cản trở cập nhật bình thường như chuyển deal sang stage tiếp theo?

Nếu trả lời “có” cho cả năm, bạn ở vị trí tốt. Nếu không, sửa ngay khi schema còn nhỏ.

Mẹo thực tế: định nghĩa stages và activity types một lần (bằng bảng hoặc enum) và dùng lại khắp nơi để mọi màn hình và quy trình dùng cùng giá trị.

Ví dụ thực tế cho đội nhỏ và bước tiếp theo

Một agency 5 người là thử nghiệm tốt cho schema CRM nhẹ. Team bận rộn, leads từ mọi nơi, và không ai muốn chăm dữ liệu. Giả sử: 1 admin, 2 sales, 1 ops lead, và 1 thành viên chỉ đọc (founder chỉ xem số).

Một yêu cầu inbound mới tới (form web hoặc email): “Cần refresh website, ngân sách $15k, timeline 6 tuần.” Quy tắc đơn giản: tạo một organization (nếu là công ty) và một contact (người). Sau đó tạo một deal gắn với organization, contact là primary contact cho deal đó.

Để nhanh, họ dùng checklist intake nhỏ:

  • Nếu domain hoặc tên công ty khớp organization hiện có thì dùng lại.
  • Nếu email của người đã tồn tại, dùng lại contact đó.
  • Luôn tạo deal khi có ý định mua thực sự.
  • Đặt tin nhắn gốc vào mô tả deal.
  • Thêm source (referral, form, outbound) như một trường đơn.

Activities ngăn cuộc gọi bị bỏ lỡ vì mọi bước tiếp theo đều thành item có ngày và có owner. Khi sales có cuộc gọi discovery, họ log một activity là meeting và thêm ngay bước tiếp theo: một call sau hai ngày. Nếu ops cần chi tiết để ước lượng công việc, họ tạo task activity trên cùng deal để hiện mọi chuyện ở một chỗ.

Roles giữ thực tế: Admin có thể chỉnh mọi thứ và quản lý cài đặt, Sales có thể tạo và cập nhật contacts, deals và activities của họ, Ops có thể cập nhật trường delivery và activities liên quan, và Read-only chỉ xem pipeline và báo cáo mà không sửa dữ liệu.

Nếu bạn muốn biến điều này thành công cụ nội bộ nhanh, AppMaster (appmaster.io) là một lựa chọn trực quan: bạn có thể mô hình schema trong Data Designer (PostgreSQL), thêm quy tắc workflow trong Business Process editor, xây hộp thư lead và trang deal đơn giản, rồi triển khai lên AppMaster Cloud hoặc cloud của bạn khi sẵn sàng chia sẻ với đội.

Câu hỏi thường gặp

What’s the simplest CRM schema a small team can start with?

Bắt đầu với bốn đối tượng lõi: Contacts (người), Organizations (công ty, tùy chọn), Deals (cơ hội) và Activities (một nhật ký thống nhất). Nếu mọi câu hỏi thường xuyên của đội bạn đều gắn với một trong những mục đó, bạn sẽ giữ được tốc độ mà không phá báo cáo.

Do I really need an Organizations table, or can I track people only?

Theo dõi Organizations khi bạn bán B2B và cần báo cáo theo công ty, hoặc khi nhiều contact thuộc cùng một khách hàng. Bỏ qua Organizations cho B2C hoặc khi bạn chỉ bán cho cá nhân, và giữ mọi thứ trong Contacts.

Why shouldn’t deal stages be a free-text field?

Tránh dùng text tự do cho stages vì lỗi chính tả và cách đặt tên sẽ phá biểu đồ. Dùng danh sách cố định (bảng stages) và lưu stage_id trên mỗi deal để bạn có thể đổi tên stage sau này mà không ảnh hưởng dữ liệu lịch sử.

What fields should be required on Contacts, Organizations, and Deals?

Giữ các trường bắt buộc ở mức tối thiểu: một ID, tên, và created_at cho contacts và organizations, cùng các trường cốt lõi của deal như stage, owner, value và close date. Các trường tùy chọn là OK — yêu cầu quá nhiều sẽ tạo ra giá trị rác như “N/A.”

How do I handle duplicate contacts and messy imports?

Đừng chặn trùng hoàn toàn trừ khi bạn chắc chắn phù hợp với quy trình. Mặc định thực tế là cho phép trùng nhưng hiển thị cảnh báo khi tìm thấy email hoặc điện thoại giống, và thêm external_id (hoặc các khóa import) để tái nhập không tạo bản ghi trùng.

Should calls, meetings, notes, and tasks be separate tables?

Dùng một bảng Activity duy nhất với trường type cố định nhỏ như call, email, meeting, note, task. Điều này làm cho “lần tương tác cuối”, công việc quá hạn và lịch sử hoạt động nhất quán vì mọi thứ dùng cùng timestamps và cấu trúc.

Why do I need both due_at and completed_at on activities?

Lưu cả due_atcompleted_at vì chúng trả lời những câu hỏi khác nhau. due_at phục vụ lên kế hoạch và báo cáo quá hạn; completed_at cho việc thực thi và phân tích thời gian vòng đời; gộp hai thứ này sẽ làm hai loại báo cáo đều không đáng tin.

How should a Deal relate to Contacts (one or many)?

Mặc định là một primary contact cho mỗi deal để báo cáo rõ ràng và giao diện đơn giản. Nếu cần những người bổ sung, thêm một bảng deal_contacts để đính kèm người tham gia thay vì biến mọi deal thành many-to-many phức tạp từ đầu.

What’s a practical ownership and visibility model for small teams?

Một mặc định tốt: mọi thứ hiển thị cho tất cả, nhưng mỗi deal có đúng một owner chịu trách nhiệm bước tiếp theo. Nếu cần riêng tư sau này, thêm trường visibility đơn giản như public/private thay vì xây ma trận quyền phức tạp ngay từ đầu.

What’s the fastest way to build and validate this schema in AppMaster?

Model các bảng trước, rồi kiểm tra với dữ liệu mẫu thực tế trước khi làm giao diện. Nếu bạn không thể dễ trả lời các câu hỏi thường gặp như deals theo stage, activities quá hạn, và lần tương tác cuối của deal, sửa schema khi nó còn nhỏ. AppMaster (appmaster.io) là một lựa chọn trực quan: bạn có thể mô hình schema trong Data Designer (PostgreSQL), thêm quy tắc workflow trong Business Process editor, xây hộp thư lead và trang deal đơn giản, rồi triển khai lên AppMaster Cloud hoặc cloud của bạn khi sẵn sàng chia sẻ với đội.

Dễ dàng bắt đầu
Tạo thứ gì đó tuyệt vời

Thử nghiệm với AppMaster với gói miễn phí.
Khi bạn sẵn sàng, bạn có thể chọn đăng ký phù hợp.

Bắt đầu