Trang tài liệu Trí Nam

Cho người ta một phần mềm, bạn sẽ làm họ bực mình một ngày - Dạy người ta lập trình, họ sẽ bực mình cả đời

Cấu trúc Database

Estimated reading: 8 minutes 406 views

Nguyên tắc chung

  • Mỗi một dịch vụ một database riêng
  • Nguyên tắc đặt tên database <Scope của dự án>_<Môi trường>_<Mã dịch vụ>_<Phiên bản core>
    • Ví dụ: với dự án thuộc scope U202001, môi trường developement, mã dịch vụ là CanBo, phiên bản core 5.0 thì tên database sẽ là U202001_CanBo_Dev_V5
  • Mỗi một dự án sẽ có 1 tài khoản truy cập riêng, tên tài khoản chính là tên scope của dự án (ví dụ U202001)
  • Tên các bảng được đặt bằng tiếng Việt không dấu, có thể đặt tên theo nhóm chức năng
    • Ví dụ: CanBo_HoSo_ChucDanh_BoNhiem_Dot – Bảng lưu trữ danh sách các đợt bổ nhiệm, thuộc nhóm chức năng cha là quản lý chức danh cán bộ, và nhóm chức năng cao hơn nữa là hồ sơ cán bộ
  • Các cột dạng số hoặc bit khuyến cáo để not null và set giá trị mặc định (trừ khi nghiệp vụ yêu cầu phải có null)
    • Ví dụ cột ThuTuHienThi, kiểu int thì đặt giá trị mặc định = 0
  • Nếu tạo các cột chứa string có giới hạn thì sử dụng nvarchar thay vì varchar (kể cả khi string đó không có ký tự unicode) vì vấn đề dự phòng đánh index sau này
  • Nguyên tắc đặt tên database, tên bảng và tên field: Viết hoa chữ cái đầu của các từ
    • Ví dụ: CanBo_HoSo_ChucDanh_BoNhiem_Dot
  • Khi tạo CSDL trừ các field base ra thì cần điền description vào tất cả các field. Việc điền description này sẽ là đầu vào cho code gen CRUD. Xem thêm thông tin về code gen:
  • Khoá ngoại đặt tên theo nguyên tắc Id<Tên bản liên kết khoá ngoại> và bỏ hết các dấu _ (nếu có)
    • Ví dụ: Trong bảng CanBo_HoiDong_ThanhVien tạo 1 field tên là IdCanBoHoiDong để liên kết với bảng CanBo_HoiDong

Nguyên tắc tạo khóa ngoại

Nguyên tắc đặt tên chung

  • Khóa ngoại đặt tên theo nguyên tắc Id<Tên bảng liên kết khóa ngoại> và bỏ hết các dấu _ (nếu có)
  • Ví dụ: Trong bảng CanBo_HoiDong_ThanhVien tạo 1 field tên là IdCanBoHoiDong để liên kết với bảng CanBo_HoiDong

Trường hợp liên kết giữa các bảng trong cùng một database

  • Tạo liên kết với field Id của bảng chính, kiểu dữ liệu uniqueidentifier. Cách đặt tên theo nguyên tắc chung ở trên.

Trường hợp liên kết giữa các bảng khác database

  • Trường hợp 1 field cần liên kết với 1 bảng duy nhất:
    • Tạo field kiểu dữ liệu uniqueidentifier (không tạo liên kết trong SQL), cách đặt tên theo nguyên tắc chung ở trên.
    • Có thể tạo thêm các field phụ để lưu mã (Code) hoặc một vài thông tin khác của bảng cần liên kết, nhưng đây là theo yêu cầu nghiệp vụ, dev cần tự cập nhật dữ liệu vào cho các field này.
  • Trường hợp 1 field cần liên kết với nhiều bảng và không xác định tại thời điểm thiết kế:
    • Sử dụng cặp field ServiceCode, Entity, EntityKey để liên kết trong đó
      • ServiceCode: Mã dịch vụ mà bản ghi liên kết đến
      • Entity: Mã đối tượng (tên bảng) mà bản ghi liên kết đến
      • EntityKey: Giá trị field Id của bản ghi liên kết đến
    • Trường hợp này phổ biến trong các bài toán dạng đính kèm. Ví dụ bảng FileObjects có thể dùng để liên kết với bất kỳ bảng nào trong bất kỳ database nào khác, thì thay vì tạo field FileId ở từng bảng nghiệp vụ thì sẽ dùng 3 field ServiceCode, Entity, EntityKey trong bảng FileObjects để liên kết. Tạo sự thuận tiện và tách biệt hơn trong nghiệp vụ của các dịch vụ.

Các cột base trong từng bảng

STT Tên cột Kiểu dữ liệu Cho phép null Giá trị mặc định Mô tả
1 Id uniqueidentifier newid() Khoá chính của bản ghi
3 Created datetime2(7) getdate() Thời gian tạo bản ghi
4 Modified datetime2(7) getdate() Thời gian cập nhật bản ghi gần nhất
5 CreatedBy nvarchar(36) Id Người tạo bản ghi
6 ModifiedBy nvarchar(36) Id Người sửa bản ghi gần nhất
7 Code nvarchar(100) Mã định danh bản ghi do người dùng nhập vào (human readable)
8 IsBuidIn bit Khoá sửa mã bản ghi nếu = true. (Trừ tài khoản có IsSuperUser = true)
9 IsBuidInAll bit Khoá sửa bất kỳ thông tin nào của bản ghi nếu = true. (Trừ tài khoản có IsSuperUser = true)
10 ServiceCode nvarchar(100) Tạo liên kết với bản ghi thuộc CSDL khác – Mã dịch vụ (mã dịch vụ liên kết)
11 Entity nvarchar(100) Tạo liên kết với bản ghi thuộc CSDL khác – Mã đối tượng (tên bảng liên kết)
12 EntityKey nvarchar(100) Tạo liên kết với bản ghi thuộc CSDL khác – Id của bản ghi liên kết
13 Version int -1 Phiên bản của bản ghi (mặc định -1 là version mới nhất hoặc không dùng version)
14 CurrentStateCode varchar(255) Mã bước hiện tại (Nếu áp dụng quy trình)
15 UserIdLastInWorkflow varchar(100) Người xử lý cuối cùng gần nhất (Nếu áp dụng quy trình)
16 DonViIdLastInWorkflow uniqueidentifier Đơn vị xử lý cuối cùng gần nhất (Nếu áp dụng quy trình)
17 WorkflowStateType int Loại trạng thái quy trình
18 IsDeleted bit Trạng thái bản ghi: 0: chưa xóa, 1: đã xóa
19 WorkflowCode nvarchar(100) Mã quy trình đang áp dụng
20 IdOrganization uniqueidentifier Dữ liệu thuộc về đơn vị (trường hợp multi tenant)

Các bảng base trong từng database

STT Tên bảng Mô tả
1 EntityMetadatas Metadata bổ sung thêm cho các bảng
2 EntityPermissions Thông tin phân quyền dữ liệu
4 EntityWorkflowInstances Instance của 1 workflow
5 EntityWorkflowSettings Cấu hình cho instance workflow
6 WorkflowPermissions Phân quyền trong workflow
7 WorkflowPermissionDetails Chi tiết phân quyền trong workflow
8 WorkflowSettings Cấu hình workflow
9 WorkflowHistorys Lịch thực thi workflow
10 WorkflowHistoryUsers Danh sách người tham gia trong quy trình ở các bước

Script tạo các cột base cho tất cả bảng trong 1 database


					
				

Script tạo các bảng base cho 1 database


					
				
CONTENTS