28 thg 11, 2025·8 phút đọc

Quy tắc đặt tên cơ sở dữ liệu cho bảng quản trị để luôn dễ đọc

Dùng quy tắc đặt tên cơ sở dữ liệu cho bảng quản trị để màn hình sinh ra dễ đọc: quy tắc rõ ràng cho bảng và trường, enum, quan hệ, và checklist nhanh.

Quy tắc đặt tên cơ sở dữ liệu cho bảng quản trị để luôn dễ đọc

Tại sao tên quyết định bảng quản trị trông rõ ràng hay lộn xộn

Hầu hết bảng quản trị được xây dựng từ mô hình dữ liệu của bạn. Tên bảng và trường cuối cùng trở thành mục menu, tiêu đề trang, tiêu đề cột, nhãn bộ lọc, và thậm chí là các từ người ta gõ vào ô tìm kiếm.

Khi tên rõ ràng, một người quản trị có thể quét danh sách và hiểu ngay trong vài giây. Khi tên mơ hồ, họ dừng lại, đoán, mở một bản ghi, quay lại và thử lại. Sự do dự đó tích tụ. Nó biến thành các câu hỏi hỗ trợ kiểu “Làm sao để tìm khách hàng đúng?” và tài liệu đào tạo không ai muốn đọc.

Lập trình viên thường đặt tên vì mục đích xây dựng và gỡ lỗi. Người vận hành đặt tên để hoàn thành công việc. Một lập trình viên có thể ổn với acct, addr1, hay stat vì họ nhớ nghĩa. Người vận hành cần thấy “Account”, “Address line 1”, và “Status” mà không phải giải mã.

Trong một màn hình quản trị, “dễ đọc” thường có nghĩa:

  • Bạn có thể quét một bảng và hiểu mỗi cột mà không cần mở một hàng.
  • Bạn có thể tìm kiếm và lọc dùng cùng từ bạn dùng trong công việc hàng ngày.
  • Bạn có thể sắp xếp và so sánh giá trị mà không bị bất ngờ (ví dụ, ngày thực sự là ngày, và trạng thái nhất quán).

Nếu bạn dùng nền tảng tạo màn hình từ mô hình (ví dụ, AppMaster’s Data Designer and admin-style views), việc đặt tên trở thành một phần của thiết kế UI. Tên tốt cho bạn các màn hình mặc định sạch ngay từ ngày đầu, trước khi bạn bắt đầu chỉnh nhãn và bố cục.

Một nền tảng đặt tên đơn giản mà cả nhóm có thể theo

Nếu bạn muốn màn hình admin sinh ra trông gọn ngay từ đầu, hãy thống nhất một nền tảng trước khi ai đó thêm bảng đầu tiên. Hầu hết vấn đề về tên không phải kỹ thuật. Chúng là vấn đề nhất quán.

Chọn một kiểu định danh và đừng mix lẫn. Với cơ sở dữ liệu, snake_case thường dễ đọc và tìm kiếm nhất. Nếu stack của bạn mong camelCase, hãy dùng nó ở mọi nơi (bảng, cột, khóa ngoại, enum). Chuyển kiểu giữa dự án làm cho nhãn và bộ lọc trông ngẫu nhiên.

Một nền tảng hoạt động cho hầu hết đội:

  • Dùng từ đầy đủ: customer_id, không phải cust_id; description, không phải desc.
  • Dùng danh từ rõ cho đối tượng và động từ rõ cho hành động: invoice, payment, refund_requested.
  • Dùng tên timestamp nhất quán: created_at, updated_at, deleted_at.
  • Tránh từ mơ hồ như data, info, value, hoặc type trừ khi bạn thêm ngữ cảnh (ví dụ shipping_address, payout_method).
  • Giữ nhất quán số ít vs số nhiều (nhiều đội dùng bảng số nhiều như customers và cột số ít như customer_id).

Viết một bảng thuật ngữ nhỏ và giữ nó hiển thị. Quyết định sớm bạn muốn dùng customer, client, account, hay user, rồi chỉ theo một từ. Làm tương tự cho “order” vs “purchase” hoặc “ticket” vs “case”.

Một kiểm tra nhanh: nếu hai người nhìn vào cột như account_status và đồng ý nó có nghĩa gì mà không hỏi, nền tảng đang hoạt động. Nếu không, đổi tên nó trước khi bạn xây màn hình và bộ lọc trên đó.

Quy tắc đặt tên bảng để map rõ ràng tới menu và danh sách

Hầu hết bảng quản trị biến tên bảng thành mục menu, tiêu đề danh sách, và breadcrumb. Schema của bạn không chỉ dành cho kỹ sư. Nó là bản nháp đầu tiên của UI.

Chọn một kiểu cho bảng thực thể và giữ nó: số ít (user, invoice, ticket) hoặc số nhiều (users, invoices, tickets). Số ít thường đọc tốt hơn trong tiêu đề form (“Edit Ticket”), trong khi số nhiều có thể đẹp hơn trong menu (“Tickets”). Cả hai đều ổn. Mix cả hai làm điều hướng cảm thấy không nhất quán.

Đặt tên bảng theo thứ chúng là, không theo việc chúng làm. Một bảng nên đại diện cho một vật bạn có thể chỉ vào. payment là một vật; processing là một hành động. Nếu sau này bạn thêm refunds, retries, và settlements, tên processing trở nên gây hiểu lầm.

Quy tắc giữ menu và danh sách gọn:

  • Dùng danh từ cụ thể (customer, subscription, invoice, ticket_message).
  • Tránh bảng “hộp” cho dữ liệu cố định (settings, misc, temp, data). Tách chúng thành thực thể thực tế (notification_setting, tax_rate, feature_flag).
  • Ưu tiên tên ghép ngắn, dễ đọc với dấu gạch dưới (purchase_order, support_ticket) hơn viết tắt.
  • Thêm tiền tố module chỉ khi nó tránh va chạm (ví dụ billing_invoice vs invoice). Nếu dùng tiền tố, áp dụng nhất quán trong module.

Nếu bạn dùng AppMaster để sinh màn hình trực tiếp từ schema, tên bảng danh từ ổn định thường tạo ra menu mặc định và view danh sách sạch với ít sửa sau.

Bảng join và định danh: giữ many-to-many dễ đọc

Quan hệ many-to-many là nơi bảng quản trị thường bắt đầu trông lộn xộn. Nếu bảng join và các khóa được đặt tên tốt, các màn hình sinh ra sẽ giữ được độ dễ đọc mà không cần nhiều sửa tay.

Bắt đầu với một quy tắc nhàm chán và đừng phá: mỗi bảng có khóa chính đặt tên id. Đừng mix user_id là khóa chính ở bảng này và id ở bảng khác. Định danh đồng nhất làm quan hệ dễ đoán, và giúp form sinh ra và các trường tham chiếu nhất quán.

Với bảng join thuần, đặt tên theo cả hai thực thể theo một mẫu và thứ tự duy nhất. Các lựa chọn phổ biến là theo thứ tự chữ cái (product_tag) hoặc “thứ chính trước” (user_role). Chọn một thứ tự và giữ nó ở mọi nơi.

Tránh tên mơ hồ như links hoặc mappings trừ khi bảng thực sự chứa liên kết chung giữa các đối tượng. Trong hầu hết admin panel, cụ thể luôn thắng sáng tạo.

Khi một bảng join trở thành một thực thể thực sự

Nếu quan hệ có thêm trường, coi nó như model riêng và đặt tên như một danh từ dễ hiểu: membership, assignment, subscription. Ví dụ, nếu vai trò của user có starts_at, ends_at, và granted_by, user_role là ổn, nhưng membership có thể đọc tốt hơn trong UI.

Một bộ quy tắc đơn giản giữ màn hình chuyên nghiệp:

  • Dùng id làm khóa chính trong mọi bảng.
  • Đặt tên bảng join với cả hai thực thể theo thứ tự nhất quán (user_role).
  • Dùng khóa ngoại rõ ràng như user_idrole_id.
  • Thêm quy tắc duy nhất khớp với thực tế (ví dụ, một role_id cho mỗi user_id).
  • Nếu cho phép lịch sử, làm quy tắc duy nhất khớp với bản ghi “active” (ví dụ, unique where ended_at is null).

Những lựa chọn này giữ vững khi dữ liệu lớn lên và hoạt động tốt với AppMaster’s Data Designer, nơi màn hình có thể sinh trực tiếp từ mô hình.

Mẫu đặt tên trường tạo cột và bộ lọc rõ ràng

Keep vocabulary consistent
Set a glossary once, then reuse it across tables, relations, and enums.
Bắt đầu dự án

Tên trường không chỉ giúp lập trình viên. Chúng quyết định điều người dùng thấy là tiêu đề cột, nhãn bộ lọc, và trường form.

Các hậu tố dự đoán loại bỏ đoán mò:

  • Dùng _id cho khóa ngoại: customer_id, assigned_agent_id.
  • Dùng _at cho timestamp: created_at, paid_at, closed_at.
  • Dùng _count cho bộ đếm: login_count, attachment_count.

Boolean nên đọc như câu đơn giản. Ưu tiên is_has_ để hộp kiểm dễ hiểu: is_active, has_paid, is_verified. Tránh phủ định kép như is_not_approved. Nếu cần trạng thái “không”, mô hình hóa ở trạng thái dương và đảo logic trong code.

Trường tiền thường gây nhầm trong lưới admin. Chọn một cách và giữ: lưu đơn vị nhỏ (ví dụ cents) dưới dạng integer, hoặc lưu decimal với độ chính xác cố định. Đặt tên trường sao cho không ai phải đoán. Ví dụ: total_amount_cents + currency_code, hoặc total_amount + currency_code. Đừng mix price, amount, và total trừ khi chúng là khái niệm khác nhau.

Trường văn bản nên cụ thể về mục đích, không chỉ kiểu. description hướng tới người dùng. internal_comment là riêng tư. notes là hộp chung và nên dùng cẩn thận. Nếu có nhiều loại ghi chú, đặt tên theo đối tượng: customer_note, agent_note.

Trường liên hệ nên là từ ngữ trực tiếp vì chúng thường trở thành bộ lọc nhanh: website_url, contact_email, billing_email. Trong màn hình admin do AppMaster sinh, những tên này thường biến thành nhãn mặc định rõ ràng.

Quan hệ và khóa ngoại: đặt tên giải thích mô hình dữ liệu

Quan hệ tốt đọc như tiếng Anh đơn giản. Khi panel admin được sinh từ cơ sở dữ liệu, tên khóa ngoại thường trở thành tiêu đề cột, bộ lọc, và nhãn form.

Giữ một quy tắc: cột khóa ngoại là tên bảng tham chiếu cộng _id. Nếu bạn có customer.id, dùng customer_id. Nếu bạn có order.id, dùng order_id. Sự nhất quán này làm rõ cột trỏ tới gì.

Quan hệ tự tham chiếu cần rõ ràng hơn vì dễ bị hiểu lầm sau này. Tránh related_id chung chung. Dùng tên giải thích hướng và ý nghĩa, như parent_id cho cây, manager_id cho sơ đồ tổ chức, hoặc merged_into_id cho việc gộp trùng.

Khi một quan hệ liên quan bảng join, đặt tên để đọc như câu. Ví dụ, ticket_assignee.user_id rõ hơn ticket_user.user_id nếu vai trò là “assignee” (không phải “reporter” hay “watcher”).

Các kiểm tra thực tế ngăn hầu hết vấn đề:

  • Đừng tái sử dụng owner_id với nghĩa khác nhau khắp nơi. Ưu tiên created_by_user_id, account_manager_user_id, hoặc billing_contact_id.
  • Nếu có nhiều quan hệ tới cùng bảng, bao gồm vai trò: requested_by_user_idapproved_by_user_id.
  • Chọn một dấu soft delete và giữ nó. deleted_at được hiểu rộng và hoạt động tốt với bộ lọc.

Nếu bạn xây màn hình trong AppMaster sau này, những tên này xuất hiện khắp nơi, nên một chút chú ý ở đây tiết kiệm nhiều công dọn dẹp UI.

Enum và trường trạng thái dễ hiểu theo thời gian

Connect schema to real logic
Create APIs and business logic on top of readable models without hand-coding everything.
Xây dựng Backend

Nếu admin panel của bạn sinh từ cơ sở dữ liệu, cách nhanh nhất làm màn hình lộn xộn là phân tán ý nghĩa qua nhiều flag nhỏ. Ưu tiên một enum trạng thái rõ ràng cho vòng đời chính của bản ghi, và giữ flag thêm chỉ cho hành vi thực sự riêng biệt.

Một quy tắc hữu ích: nếu người dùng sẽ hỏi “Mục này đang ở đâu trong hành trình?”, đó là trạng thái. Nếu câu hỏi là “Có nên ẩn nó không?” hoặc “Nó bị khoá không?”, đó là boolean riêng.

Một trạng thái còn hơn năm boolean

Thay vì is_new, is_in_progress, is_done, is_cancelled, hãy dùng một ticket_status. Nó đọc tốt hơn trong cột danh sách, bộ lọc, và thao tác hàng loạt. Nó cũng tránh các kết hợp vô lý như “done + in_progress”.

Giữ giá trị enum ổn định. Văn bản UI có thể thay đổi, nhưng giá trị lưu không nên. Lưu pending, không phải waiting_for_review. Lưu rejected, không phải rejected_by_manager. Bạn luôn có thể hiển thị nhãn thân thiện hơn sau này mà không cần di cư dữ liệu.

Khi cần chi tiết thêm, thêm một trường thứ hai thay vì quá tải trạng thái. Ví dụ: giữ payment_status cho vòng đời, và thêm failure_reason (text) khi cần.

Đặt tên enum theo miền (để bộ lọc có ý nghĩa)

Dùng tiền tố theo miền để màn hình dễ đọc khi nhiều model có “status”:

  • payment_status (checkout đơn hàng)
  • ticket_priority (độ khẩn cấp hỗ trợ)
  • user_role (mức truy cập)
  • invoice_status (vòng đời thanh toán)
  • delivery_status (vòng đời vận chuyển)

Tách vòng đời khỏi flag vận hành. Ví dụ: status mô tả nó ở đâu trong workflow, trong khi is_archived nghĩa là nó nên ẩn khỏi danh sách hàng ngày.

Viết một câu mô tả ngắn cho mỗi giá trị enum trong ghi chú nhóm. Bạn sẽ quên khác biệt giữa cancelledvoided sau này. Nếu dùng AppMaster, những định nghĩa ngắn đó cũng giúp dropdown và bộ lọc sinh ra nhất quán trên web và mobile.

Trường hợp biên: ngày, trường audit, và cột “type”

Hướng dẫn đặt tên thường bao phủ bảng và trường cơ bản, nhưng admin panel trở nên lộn xộn ở các trường hợp biên. Ngày, trường audit, và cột “type” là nơi tên mơ hồ thành màn hình mơ hồ.

Với ngày và timestamp, hãy để tên kể câu chuyện: nó là dự kiến, thực tế, hay nhắc nhở? Mẫu đơn giản là ý nghĩa dưới dạng động từ cộng hậu tố rõ ràng. Ví dụ due_at (hạn dự kiến) và completed_at (hoàn thành thực tế) hiển thị như tiêu đề cột và bộ lọc dễ hiểu. Tránh cặp mơ hồ như start_dateend_date khi bạn thực sự muốn scheduled_atfinished_at.

Quan hệ tùy chọn là cái bẫy phổ biến khác. Đừng nghĩ ra mẫu mới cho mỗi bảng. Giữ tên quan hệ ổn định và cho phép null biểu thị “tùy chọn”, không phải đổi tên field. manager_id vẫn nên là manager_id ngay cả khi nó có thể null.

Địa chỉ có thể hợp lý trong code nhưng xấu trong lưới. Dòng đánh số chỉ ok nếu cả nhóm thống nhất nghĩa. Giữ rõ ràng:

  • address_line1, address_line2, city, region, postal_code, country_code
  • Tránh address1, address2 (khó đọc, dễ trùng lặp)

Trường audit nên nhàm chán theo mục đích:

  • created_at, updated_at
  • created_by_id, updated_by_id (chỉ khi thực sự cần theo dõi người dùng)

Cẩn trọng với type. Nó hầu như luôn quá rộng và nhanh chóng lạc hậu. Thay vì type, đặt tên theo ý nghĩa: payment_method, ticket_channel, customer_tier. Trong các màn hình sinh từ schema (bao gồm AppMaster), lựa chọn này có thể tạo nên sự khác biệt giữa bộ lọc rõ ràng và dropdown gây nhầm.

Ví dụ: đặt tên model ticket hỗ trợ để trông ổn trong admin

Build the full stack no-code
Use AppMaster to build a full solution: database, backend, and admin UI from one model.
Get Started

Một cấu trúc hỗ trợ nhỏ và thực tế: khách hàng gửi yêu cầu, nhân viên trả lời, và ticket có thể được tag. Quy tắc đặt tên làm cho menu, màn hình danh sách, và bộ lọc sinh ra có vẻ hiển nhiên.

Bắt đầu với tên bảng đọc như danh từ trong sidebar:

  • customer
  • ticket
  • ticket_message
  • ticket_tag
  • ticket_tag_link

Trong hầu hết admin panel, chúng trở thành nhãn như “Tickets” và “Ticket Messages”, và bảng join nằm ngoài tầm mắt.

Với màn hình danh sách ticket, chọn tên trường sẽ thành tiêu đề cột và bộ lọc rõ ràng:

  • subject, status, priority
  • assigned_to_id (trỏ tới user nhân viên)
  • last_message_at (dùng để sắp xếp theo gần nhất)
  • created_at (tiêu chuẩn và dễ dự đoán)

Enum thường là nơi dễ mất tính đọc sau này, nên giữ tập giá trị ổn định và đơn giản:

  • ticket_status: new, open, pending_customer, resolved, closed
  • ticket_priority: low, normal, high, urgent

Một lựa chọn đặt tên ngăn nhầm lẫn liên tục: đừng quá tải “customer”. Trong hỗ trợ, người yêu cầu không luôn là khách hàng (đồng nghiệp có thể gửi thay). Nếu bạn lưu người gửi, đặt requester_id, và lưu riêng customer_id cho tài khoản ticket nói về. Sự khác biệt này giữ form và bộ lọc trung thực ngay từ đầu.

Bước từng bước: cách đặt tên model mới trước khi xây màn hình

Extend admin to mobile
Use the same clear model to generate mobile views when your team needs on-the-go admin.
Create Mobile App

Cách dễ nhất để giữ màn hình dễ đọc là đặt tên khi bạn còn nghĩ bằng ngôn ngữ bình dân, không khi đã bắt đầu xây.

Một quy trình lặp lại cho mọi tính năng

  1. Bắt đầu với bảng thuật ngữ nhỏ (5–10 từ). Viết những từ đồng nghiệp không chuyên sẽ dùng trong cuộc họp, rồi chọn một từ ưu tiên cho mỗi khái niệm (ví dụ “customer” vs “client”).

  2. Phác thảo các màn hình mong đợi: list, detail, create, edit. Với view danh sách, quyết định 5–8 cột phải rõ ràng ngay lập tức. Nếu tên trường trông lạ khi làm tiêu đề, có lẽ cần chỉnh.

  3. Soạn bảng và quan hệ, rồi đặt tên trường theo quy tắc hậu tố (*_id, *_at, is_*, *_count). Khi bạn sau này sinh admin (bao gồm trong AppMaster), các mẫu này thường tạo nhãn mặc định sạch và bộ lọc dự đoán.

Trước khi tiếp, đảm bảo bạn không mix kiểu (customer_id ở bảng này, clientId ở bảng khác). Nhất quán thắng sáng tạo.

  1. Định nghĩa enum sớm, không phải sau khi UI đầu tiên tồn tại. Viết một câu ngắn cho mỗi giá trị, như thể bạn giải thích cho nhân viên hỗ trợ. Ưu tiên giá trị tồn tại lâu dài, như pending, active, archived (không phải new, newer, newest).

  2. Làm “đọc tiêu đề cột”. Giả vờ bạn là người dùng admin quét bảng.

  • Liệu “Created At”, “Updated At”, “Status”, “Assigned To”, “Total Amount” có hiểu được mà không cần đào tạo?
  • Có trường nào trông như mã nội bộ (tmp_flag, x_type, data1)?
  • Đơn vị có rõ ràng không (amount_cents vs amount, duration_seconds vs duration)?

Nếu có gì nghe lạ khi đọc lớn, đổi tên ngay. Đổi tên sau được, nhưng thường rắc rối vì lan ra báo cáo, bộ lọc, và thói quen.

Lỗi đặt tên phổ biến khiến admin khó dùng

Nếu schema lộn xộn, màn hình cũng lộn xộn, dù UI có đẹp đến đâu. Quy tắc đặt tên ít về “phong cách” hơn về khả năng dùng hàng ngày.

Bẫy đầu là từ vựng lẫn lộn. Nếu một bảng gọi client và bảng khác customer, menu, bộ lọc, và kết quả tìm kiếm trông như mô tả những thứ khác nhau. Chọn một từ cho mỗi khái niệm cốt lõi và dùng nó mọi nơi, kể cả tên quan hệ.

Vấn đề phổ biến khác là viết tắt quá mức. Viết tắt như addr, misc, hay info tiết kiệm vài ký tự nhưng làm mất nhiều rõ ràng trong bảng và xuất báo cáo.

Lỗi thứ ba là nhồi flow UI vào database. Trường như new_customer_wizard_step hợp lý khi ra mắt, rồi gây nhầm khi flow thay đổi. Lưu sự thật nghiệp vụ (ví dụ onboarding_status) và để UI quyết định cách hướng dẫn.

Cũng cảnh giác với quá nhiều boolean. Khi thêm is_new, is_open, và is_closed, cuối cùng bạn sẽ có xung đột (hai cái true cùng lúc) và bộ lọc mơ hồ. Ưu tiên một trường trạng thái nhỏ, được đặt tên tốt.

Dấu hiệu đỏ dẫn đến màn hình xấu:

  • Hai tên khác nhau cho cùng một thứ (client_id ở chỗ này, customer_id ở chỗ khác)
  • Cột hộp chung (notes, misc, extra) chứa dữ liệu hỗn tạp
  • Tên phụ thuộc thời gian (summer_campaign_*) sống quá lâu sau khi chiến dịch kết thúc
  • Nhiều boolean cố mô tả một trạng thái
  • Đổi tên tùy tiện mà không có kế hoạch migration

Đổi tên không chỉ là tìm và thay thế. Nếu bạn đổi customer_phone thành phone_number, hãy lên kế hoạch migration, cập nhật mọi màn hình sinh, và giữ tương thích ngược khi cần (đặc biệt nếu hệ thống khác đọc API). Trong AppMaster, tên sạch mang lại lợi ích ngay vì danh sách, form, và bộ lọc kế thừa nhãn từ mô hình.

Checklist nhanh trước khi phát hành bảng quản trị

Get a clean default admin
Generate list and form views from your schema, then adjust labels only where needed.
Xây dựng Admin

Trước khi gọi schema là “xong”, hãy rà soát từ góc nhìn người sống trong admin panel hàng ngày.

  • Bảng nghe như đồ vật thực. Đồng nghiệp nên nói được bảng đại diện cho gì (ticket, customer, invoice) mà không cần đoán.
  • Trường chính theo hậu tố dự đoán. Dùng mẫu quen thuộc: *_id cho tham chiếu, *_at cho timestamp, *_amount (hoặc *_amount_cents) cho tiền, và is_* cho flag true/false.
  • Enum ổn định và đơn giản. Lưu giá trị như pending, paid, failed thay vì cụm từ UI sẽ thay đổi.
  • Người mới có thể hiểu mục đích. Nếu các trường xuất hiện trong view danh sách sinh ra mà không có help text, ý định vẫn rõ chứ?
  • Từ mơ hồ bị loại hoặc cụ thể hoá. Thay tên hộp như data, value, type, hoặc info bằng cụ thể như status, source, category, notes, hoặc external_reference.

Nếu bạn dùng AppMaster’s Data Designer để sinh view kiểu admin từ schema, checklist này rất thiết thực: tên rõ ràng tạo cột và bộ lọc rõ ràng, và bạn bớt thời gian sửa nhãn sau khi người dùng bắt đầu làm việc.

Bước tiếp theo: biến việc đặt tên thành thói quen (và giữ màn hình nhất quán)

Đặt tên tốt không phải dọn dẹp một lần. Nó là thói quen nhỏ giữ UI admin dễ đọc khi schema lớn dần.

Bắt đầu với một module hiện có và áp dụng quy tắc chỉ cho bảng mới bạn thêm. Điều đó tránh rewrite lớn và cho bạn nơi thực hành. Nếu tính năng tiếp theo thêm “returns” vào hệ thống đơn hàng, đặt tên bảng, khóa ngoại, và trạng thái theo mẫu từ ngày đầu, rồi dùng lại cách đó cho tính năng sau.

Giữ một trang hướng dẫn đặt tên cạnh nơi bạn làm việc với schema. Giữ ngắn: cách bạn đặt tên bảng, khóa chính, khóa ngoại, timestamp, và enum trạng thái. Mục tiêu là quyết định nhanh, không tranh luận dài.

Nếu bạn xây với AppMaster, nên đặt các mẫu này trong Data Designer trước khi chạm vào màn hình UI. Khi đổi tên bảng hoặc trường, regenerate app để màn hình, API, và logic đồng bộ thay vì trôi dần.

Một bước rà soát nhẹ trước mỗi bản phát hành thường đủ:

  • Tên bảng và trường đọc tốt như mục menu, tiêu đề cột, và bộ lọc?
  • Trạng thái và enum có rõ ràng mà không cần giải thích thêm?
  • Quan hệ và khóa ngoại tự giải thích (không có viết tắt bí ẩn)?
  • Các model tương tự đặt tên nhất quán (cùng từ, cùng thứ tự)?

Theo thời gian, lợi ích thực sự là sự nhất quán. Khi mọi model mới theo cùng quy tắc, admin panel của bạn bắt đầu trông như được thiết kế dù chúng được sinh tự động, vì nhãn và danh sách đọc như một sản phẩm thống nhất.

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

Why do database names affect how an admin panel looks and feels?

Dùng tên sao cho mô tả bản thân bản ghi là gì, chứ không phải bản ghi làm gì. Một bảng gọi là ticket hoặc invoice sẽ trở thành mục menu rõ ràng, trong khi một tên như processing nhanh chóng gây nhầm khi luồng công việc thay đổi.

Should we use snake_case or camelCase for tables and columns?

Chọn một kiểu và dùng thống nhất ở mọi nơi. Với hầu hết cơ sở dữ liệu, snake_case dễ đọc nhất và giúp nhãn và bộ lọc sinh ra không cảm thấy lộn xộn.

How do we decide when abbreviations are OK?

Mặc định hãy dùng từ đầy đủ, dễ hiểu, vì chúng sẽ trở thành tiêu đề cột và nhãn bộ lọc. Các chữ viết tắt như acct hay addr1 thường tạo sự chần chừ cho người vận hành, dù lập trình viên có hiểu.

Should table names be singular or plural?

Chọn một cách và giữ nhất quán: hoặc số ít (ticket) hoặc số nhiều (tickets). Mục tiêu chính là điều hướng và tiêu đề trang không đổi phong cách giữa các module.

What’s a simple rule for primary keys and foreign keys?

Giữ một quy tắc đơn giản: khóa chính của mọi bảng là id, và khóa ngoại có dạng something_id. Điều này làm cho quan hệ dễ đoán và giúp các form và trường tham chiếu sinh ra trông nhất quán.

How should we name many-to-many join tables so the UI stays readable?

Đặt tên các bảng join chỉ cho hai thực thể, theo một thứ tự cố định như user_role hoặc product_tag. Nếu quan hệ có trường riêng và ý nghĩa, đổi tên thành danh từ thực tế như membership hoặc assignment để UI đọc tự nhiên hơn.

What field naming patterns produce clean columns and filters?

Dùng hậu tố dễ đoán phù hợp kiểu dữ liệu và ý định, như _at cho timestamps và _count cho bộ đếm. Với boolean, ưu tiên is_has_ để hộp kiểm đọc như câu đơn giản trên màn hình sinh ra.

Is it better to use one status enum or several boolean flags?

Ưu tiên một trường trạng thái rõ ràng cho vòng đời chính, như ticket_status hoặc invoice_status, thay vì nhiều boolean chồng chéo. Giữ giá trị lưu ổn định và đơn giản để sau này có thể thay đổi nhãn hiển thị mà không phải di cư dữ liệu.

How do we name multiple relations to the same table without confusion?

Đừng dùng chung tên như owner_id hay type khi chúng mang nghĩa khác nhau. Dùng tên theo vai trò: created_by_user_id, approved_by_user_id hoặc payment_method để màn hình và bộ lọc tự giải thích.

When should we rename a table or column, and how do we avoid breaking things in AppMaster?

Đổi tên càng sớm càng tốt, trước khi màn hình, bộ lọc và báo cáo phụ thuộc vào tên cũ. Trong AppMaster, cập nhật tên trong Data Designer rồi regenerate để UI và API luôn đồng bộ, tránh drift theo thời gian.

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