Thứ Sáu, 15 tháng 4, 2011

Nấc thang tiến tới thiết kế database – bước 1: các phần tử dữ liệu

Nấc thang tiến tới thiết kế database – bước 1: các phần tử dữ liệu
Stairway to Database Design - STEP 1: Data Elements

Bài viết của Joe Celko , lược dịch bởi DongND
Bài dịch để chúc mừng một ngày mới...

    Bạn mới biết về thiết kế và tạo một database? Joe Celko , người có nhiều kinh nghiệm, sẽ chỉ cho ta những thứ cơ bản nhất. Joe đoạt giải trong cuộc thi The DBMS Magazine Reader's Choice Award bốn năm liên tiếp.
    (Ở đây ta có thể tạm hiểu phần tử dữ liệu như là một cột dữ liệu)

   Trước khi bạn nghĩ đến lược đồ hay bảng, bạn cần xem xét về dữ liệu sẽ lưu, kiểu và miền giá trị của nó. Nó nên được duy nhất, chính xác và rõ ràng. Sau đó là đặt tên nó sao cho dễ hiểu.

    Dữ liệu
   
    Chẳng có gì quá ngạc nhiên khi bước đầu tiên chúng ta quan tâm trong thiết kế database là dữ liệu, Nhưng sự thật là có quá nhiều lập trình viên không thiết kế dữ liệu trước khi thiết kế lược đồ. Cái chính mà SQL xử lý đó chính là dữ liệu có cấu trúc nhằm phản kháng lại dữ liệu không cấu trúc như text hay picture. Một trong những khái niệm căn bản trong RDBMS mà Dr. Codd gọi là Nguyên lý thông tin (the Information Principle), nói rằng tất cả dữ liệu trong RDBMS như là những giá trị đơn giao giữa cột và dòng trong bảng.
   
    Nó cũng có nghĩa là tất cả mọi dòng trong bảng có cùng một cấu trúc. Có nghĩa là chúng ta sẽ không thiết kế bảng kiều như dòng một là kiểu mô tô, dòng hai kiểu mực ồng và dòng ba lại đại diện cho Lady Gaga.

    Như thế, có nghĩa là mỗi cột có cùng phần tử dữ liệu. Một cột thì không thay đổi như thay đồi từ số đo giày sang số đo nhiệt độ C, rồi sang những thứ khác. Nghĩa là miền giá trị khổi đổi. Nếu cột đó đo nhiệt độ C, thì tất cả dữ liệu sử dụng miền giá trị của nhiệt độ C.

    Hiều được miền giá trị và kiểu dữ liệu rất quan trọng. Nó sẽ tốt cho việc tính toán, so sánh với các phần tử khác. Nó cũng giải thích tại sao SQL lại là một ngôn ngữ có kiểu chặt chẽ (strongly typed language) . Một số khác không chặt chẽ, một biến có thể thay đổi kiểu dữ liệu lúc chương trình thực thi. Các kiểu chặt chẽ thì kiểu dữ liệu sẽ giữ nguyên, trừ khi bạn ép kiểu nó. Một ví dụ kinh điền là với kiểu dữ liệu không chặt là PL/I nó có thể convert cả một array kiểu FLOAT sang COMPLEX nếu bạn gán giá trị cho các phần thử trong array bằng căn bậc hai của số âm. Nó chắng cảnh báo gì cả. Có một chuyện vui từ kiểu dữ liệu không chặt như sau:
   
    Giáo viên hỏi: "Tí, 6 nhân 9 bằng mấy?"
    Tí: “ Ahhh…, màu đỏ”
    Giáo viên hỏi tiếp: “Không phải. Tõm, 6 nhân 9 bằng mấy?”
    Tõm: “ Là thứ năm?”
    Giáo viên hỏi tiếp: “Không phải. Tèo, 6 nhân 9 bằng mấy?”
    Tèo: “54”
    Giáo viên: “Chính xác. Tèo, em có thể nói cho lớp biết làm thế nào mà em trả lời được đúng không?”
    Tèo: “Em lấy màu đỏ chia cho Thứ năm.”
   
    Cách đặt tên
   
    Người viết trên các ngôn ngữ có kiểu dữ liệu yếu thường đặt thêm tên với các tiền tố hoặc hậu tố để biết kiểu dữ liệu đầu tiên của nó là gì. Điều này không đúng so với chuẩn ISO_11179. ISO này có định dạng là “[<role>_]<attribute>_<property>”. Ví dụ như “supervisor_emp_id”, “subordinate_emp_id”… Ta có thể bỏ role nếu như không cần sự phân biệt…

    Một phần tử dữ liệu chỉ nên duy nhất trong toàn lược đồ. Tốt hơn là duy nhất trong toàn hệ thống, mà tốt nhất là duy nhất trên toàn cầu. Chúng ta nghe câu chuyện vui về vấn đề sau nhé:

    “Khi tôi là một đứa trẻ, nhà tôi có 3 con mèo”
    “Tên chúng là gì thế?”
    “Mèo, mèo và mèo”
    “Nghe có vẻ rối nhỉ, làm sao bạn gọi mỗi con đến?”
    “Có ai quan tâm đâu? Những con mèo đó chẳng đến khi tôi gọi chúng bằng cách nào đi nữa”

    Còn chúng ta thì muốn dữ liệu đến khi ta gọi. Trong logic có Luật nhận dạng, nó thường được viết tắt kiểu như “A là A” trong bảng chữ cái. Nó có nghĩa là:
    - Nếu đối tượng có thể phân biệt, nó cần có đặc tính nhận dạng (identity)
    - Nếu không có gì đặc biệt, nó phải được duy nhất và chính xác
    - Nếu là đối tượng chung, thì chúng cũng không mơ hồ.

    Một số cách đặt tên các phần tử dữ liệu như sau: (không dịch để dễ hiểu hơn)
    "_id" = identifier.
    "_date" or “_dt" = date temporal dimension.
    "_nbr" or “_num" = tag number;
     "_name" or “_nm" = this is an alphabetic name and it explains itself.
     "_code" or "_cd"= A code is a standard maintained by a trusted source, usually outside of the enterprise.
    "_size" = an industry standard or company scale for a commodity
    "_seq" = sequence, ordinal numbering.
    "_tot" = a sum, an aggregated dimension which is logically different from its parts.
    "_tally" = a count of values, an aggregated dimension. Also called an absolute scale.
    "_status" = an internal encoding that reflects a state of being that changes in a known pattern.
    "_cat" = category, an encoding from an external source that that requires an official judgment. For example, a Category Five hurricane.
    "_type" = an encoding that has a common meaning both internally and externally.
    "_addr" or "_loc" = An address or location for an entity.
    "_img" = An image data type, such as .jpg, .gif and so forth. It might be important to use the particular format as the property.
   
    Và bạn cứ tự do thêm vào danh sách các từ khác nếu cần, nhưng nhớ tham khảo xem chúng có đúng chuẩn không…
   
    Vậy, bước đầu tiên trong thiết kế database chính là thiết kế dữ liệu bao gồm kiểu dữ liệu và miền giá trị. Tiếp theo nữa là cách đặt tên sao cho giống chuẩn để thuận lợi cho việc phát triển sau này.

   Ghi chú:
   Bạn có thể đọc các bài viết tiếp theo trong chủ đề này tại
   http://www.sqlservercentral.com/articles/Stairway+Series/69801/
   
    


1 nhận xét: