Có thể loại bỏ hoàn toàn cái gọi là 'Spup Tuples' không?


Câu trả lời:


9

Đâ là một câu hỏi tuyệt vời. Bình thường hóa ngoài BCNF là vô cùng khó hiểu. Hy vọng tôi có thể cung cấp một câu trả lời có ý nghĩa. Tôi đã vật lộn với các khái niệm này trong hơn 20 năm trước khi cuối cùng hiểu được chúng nhờ vào Chuỗi cơ sở dữ liệu thực tế của Fabian Pascal .

Ví dụ được cung cấp là một EmpRoleProjbảng R trông giống như vậy:

nhập mô tả hình ảnh ở đây

Sau đó, nó tiếp tục hiển thị các hình chiếu của EmpRoleProjbảng R ban đầu như vậy:

nhập mô tả hình ảnh ở đây

Lý do bạn không thấy có gì sai với các bảng cơ sở Table 1Table 2là vì bạn không xem xét các quy tắc phụ thuộc (trong trường hợp này là quy tắc phụ thuộc đa biến (MVD)) được xác định trong mô hình kinh doanh mô tả quy tắc kinh doanh. Nếu chúng ta giả sử vì lợi ích của ví dụ không có MVD nào được xác định trong quy tắc kinh doanh thì EmpRoleProj nằm trong 5NF mặc dù "sự xuất hiện" của các khoản dự phòng. Ví dụ, thông tin mà Smith là nhà thiết kế được lưu trữ dự phòng. Dường như thông tin mà một nhà thiết kế cần có trong dự án Amazon được lưu trữ dự phòng. Mặc dù điều này dường như là trường hợp, bằng cách biết rằng trên thực tế đây không phải là MVD, thực tế trường hợp là Smith là gìtình cờ trở thành một nhà thiết kế trong một vài dự án, nhưng thực tế Smith không phải một nhà thiết kế và do đó thực tế đó không nên được suy luận. Khi bảng 1 và bảng 2 được nối, kết quả:

nhập mô tả hình ảnh ở đây

cho thấy Jones là một nhà thiết kế trong dự án Nile nhưng chúng tôi biết đó không phải là trường hợp.

Chúng ta giả thay vì mô hình kinh doanh đã nói có MVDs của empName-->>rolerole-->>projName. Trong trường hợp này, những gì những MVDs có nghĩa là nếu một nhân viên đóng một vai trò, và nếu vai trò đó là một dự án, theo định nghĩa rằng người lao động đóng vai trò trong dự án đó. Trong ví dụ này, cùng một bảng EmpRoleProj hiện không có trong 5NF và hiện tại không bị dư thừa. Bây giờ, sự thật rằng Smith là một nhà thiết kế và cần có một nhà thiết kế trong dự án Amazon được lưu trữ dự phòng vì những sự thật đó có thể được suy ra từ việc tham gia Bảng 1 và Bảng 2! Tương tự như vậy, việc tham gia Bảng 1 và Bảng 2 bây giờ khôngdẫn đến một cuộc tấn công giả mạo khi suy luận rằng Jones là một nhà thiết kế cho dự án Nile là một thực tế hiện nay dựa trên các quy tắc kinh doanh được xác định bởi MVDs.

Đây là lý do tại sao bạn không thể đánh giá hình thức bình thường của bất kỳ bảng R nào mà không biết các phụ thuộc và khóa được xác định. Đưa ra bất kỳ giả định nào, thậm chí một điều có vẻ như có ý nghĩa với bạn, có thể nguy hiểm. Nếu bạn đã từng được hỏi R-Table ở dạng bình thường nào, bạn phải yêu cầu các phụ thuộc để đánh giá. Ngoài loạt bài báo của Fabian, các tác phẩm của Chris Date cung cấp thông tin tốt nhất có sẵn về lý thuyết chuẩn hóa.


3

Một tuple giả là những gì bạn có thể nhận được nếu các hàng trong cơ sở dữ liệu được nối không chính xác. Điều này có thể khiến một hàng 'mới nhưng giả' được tạo do lỗi.

Trong ví dụ của bạn từ cuốn sách Cơ sở dữ liệu Phiên bản thứ ba được chiếu sáng của Ricardo và Urban, họ cho thấy ví dụ này :

Như bạn có thể thấy, việc chia các bản ghi trong 6.8 (B) thành hai bảng, nhưng không duy trì ý nghĩa của dữ liệu khiến cho phép nối trong 6.8 (C) tham gia Jones Designer cho cả Amazon (đúng) và cho Nile (đó là giả).

Vì vậy, tham gia cẩn thận. Phép nối gây ra lỗi trong 6.8 (C) là do mất dấu vết của các mối quan hệ giữa dữ liệu. Dễ dàng thực hiện nếu bạn không bao gồm các tiêu chí tham gia ban đầu.

Nếu bạn muốn một cuộc thảo luận trình chiếu ở đây là một ví dụ từ:

http://groupes.engr.oregonstate.edu/eecs/winter2012/cs440/slides/slide9.pdf

   Design relation schemas to be joined with equality conditions 
        on attributes that are appropriately related.

       - Guarantees that no spurious tuples are generated

    Avoid relations that contain matching attributes 
        that are not (foreign key, primary key) combinations

3

Trong sự phân rã của một lược đồ quan hệ, "tuple giả" chỉ là một triệu chứng giả định về thông tin bị mất. Điều đó có nghĩa là một số phụ thuộc được thể hiện trong một mối quan hệ nhất định sẽ bị mất do kết quả của việc tách mối quan hệ đó thành hai hoặc nhiều thành phần. Cho dù đó là vấn đề bạn cần giải quyết hay không phụ thuộc vào mức độ quan trọng của sự phụ thuộc bị mất đối với bạn.

Trong ví dụ bạn đề cập, bảng EmpRoleProj cho chúng ta biết các dự án mà mỗi nhân viên đang làm. Trong thiết kế Table1, Table2, thông tin bị mất - chúng ta không còn có thể nói rằng Jones chỉ hoạt động trên dự án Amazon chứ không phải trên dự án Nile.

Là một nhà thiết kế cơ sở dữ liệu, bạn cần xem xét thông tin hoặc tính toàn vẹn nào đã bị mất và sau đó quyết định nên thực hiện hành động nào: thay đổi thiết kế, thêm các ràng buộc toàn vẹn hoặc quyết định rằng phân tách mới thực sự là một cải tiến đối với những gì đi trước nó.


0

Nếu mối quan hệ R bằng R1 THAM GIA R2 THAM GIA ... thì chúng ta có thể sử dụng R1 THAM GIA R2 THAM GIA ... thay vì R. Rõ ràng. Nhưng R1, R2, ... sẽ là các phép chiếu của R. Trong khi đó, nếu chúng ta thực hiện các phép chiếu R1 ', R2', ... của R trong đó R không bằng R1 'THAM GIA R2' THAM GIA ... thì chúng ta không thể sử dụng R1 'THAM GIA R2' THAM GIA ... thay vì sử dụng R. Rõ ràng. Nhưng R1 'THAM GIA R2' THAM GIA ... sẽ giống như R cộng với một số bộ dữ liệu khác . Chúng là "bộ dữ liệu giả" so với giá trị của R và R1 THAM GIA R2 THAM GIA .... Nhưng chúng thuộc về R1 'THAM GIA R2' THAM GIA .... Đó chỉ không phải là R . Để "thoát khỏi các bộ giả mạo" chỉ không sử dụng R1' THAM GIA R2' THAM GIA ... cho R . Nhưng sau đó, tại sao sẽbạn? Chỉ khi bạn nghĩ rằng bất kỳ dự đoán cũ nào của R THAM GIA trở lại R. Nhưng họ không. Nhưng sau đó, tại sao sẽ họ?

Vì vậy, câu hỏi của bạn là cụm từ kỳ quặc. Chúng tôi muốn thay thế một bảng là sự tham gia của một số người khác bởi những người khác. Chúng tôi không muốn thay thế một bảng không phải là sự tham gia của một số người khác bởi những người khác. Vì vậy, chúng ta luôn có thể "thoát khỏi các tuple giả" bằng cách không làm điều đó .

Bình thường hóa là về việc thay thế một bảng là sự tham gia của một số người khác bởi những người khác. Khi R = R1 THAM GIA R2 THAM GIA ... chúng tôi nói rằng JD (phụ thuộc tham gia) giữ trong R. Trái ngược với trí tuệ nhận được, rất dễ thấy JD nếu chúng tôi đang tìm kiếm và chúng tôi biết ý nghĩa của các bảng của chúng tôi. Khi R giữ các bộ dữ liệu trong đó " ... A1a ... A1b ...... A2a ... A2b ... VÀ ...", đó là sự tham gia của R1, R2, ... trên thuộc tính tương ứng đặt {A1a, A1b, ...}, {A2a, A2b, ...}, ... với ý nghĩa tương ứng " ... A1a ... A1b ... ", " ... A2a ... A2b ... ", .... Chúng tôi tự nhiên sử dụng R1, R2, ... hầu hết thời gian từ khi bắt đầu thiết kế. Sự khôn ngoan nhận được cũng là các JD không đi kèm với FD (phụ thuộc chức năng) là rất hiếm. Chúng là, nhưng chỉ vì hầu hết các JD rõ ràng đến mức các thiết kế ban đầu của chúng tôi tránh chúng . Chúng "khó tìm" chỉ vì chúng rất dễ tìm. (Sẽ phức tạp hơn một chút khi không phân hủy theo JD mà không gây ra sự cố.)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.