Lý do chính đáng để sử dụng chế độ xem SQL là gì?


98

Tôi đang đọc qua kinh thánh SQL Server 2008 và tôi đang đề cập đến phần chế độ xem. Nhưng tác giả thực sự không giải thích mục đích của các lượt xem. Cách sử dụng tốt cho lượt xem là gì? Tôi có nên sử dụng chúng trong trang web của mình không và lợi ích của chúng là gì?


Bạn có thể vui lòng cung cấp cho tôi tệp cơ sở dữ liệu của cuốn sách "SQL Server 2008 Bible" không? Trang web của tác giả đã chết và tôi không thể liên lạc được với anh ấy.

Câu trả lời:


92

Một cách sử dụng khác mà dường như chưa có câu trả lời nào đề cập đến là việc triển khai các thay đổi cấu trúc bảng dễ dàng hơn.

Giả sử, bạn muốn gỡ bỏ một bảng ( T_OLD) chứa dữ liệu cho người dùng đang hoạt động và thay vào đó sử dụng một bảng mới có dữ liệu tương tự (được đặt tên T_NEW) nhưng một bảng có dữ liệu cho cả người dùng đang hoạt động và không hoạt động, với một cột bổ sung active.

Nếu (các) hệ thống của bạn có các truy vấn gazillion SELECT whatever FROM T_OLD WHERE whatever, bạn có hai lựa chọn để triển khai:

1) Cold Turkey - Thay đổi DB, đồng thời thay đổi, kiểm tra và phát hành nhiều đoạn mã chứa truy vấn đã nói. RẤT khó thực hiện (hoặc thậm chí phối hợp), rất rủi ro. Xấu.

2) Dần dần - thay đổi DB bằng cách tạo T_NEWbảng, bỏ T_OLDbảng và thay vào đó tạo một CHẾ ĐỘ XEM được gọi là T_OLDbắt chước T_OLDbảng 100% (ví dụ như truy vấn chế độ xem SELECT all_fields_except_active FROM T_NEW WHERE active=1).

Điều đó sẽ cho phép bạn tránh phát hành BẤT KỲ mã nào hiện đang chọn từ đó T_OLDvà thực hiện các thay đổi để di chuyển mã từ đó T_OLDsang T_NEWkhi rảnh rỗi.

Đây là một ví dụ đơn giản, có những người khác tham gia nhiều hơn.

PS Mặt khác, có lẽ bạn nên có một API thủ tục được lưu trữ thay vì các truy vấn trực tiếp từ T_OLD, nhưng không phải lúc nào cũng vậy.


3
Tôi không biết gì về thuật ngữ "API thủ tục được lưu trữ" và những ưu / nhược điểm liên quan và thấy bài viết này hữu ích: codinghorror.com/blog/2005/05/…
Jeff Widman 13/1213

Xin lỗi tôi đến muộn bữa tiệc, nhưng còn về hiệu suất. Nếu tôi cần kết hợp trên bảng ban đầu và thay vào đó tôi sẽ tham gia Chế độ xem, nó có sử dụng kế hoạch thực thi tốt nhất không?
Zikato

@Zikato vâng, nếu đó là một chế độ xem được lập chỉ mục
LinkBerest

V Tốt Chỉ định
Afnan Ahmad

47

(Được sao chép từ hướng dẫn đầu tiên xuất hiện trong tìm kiếm của Google (liên kết hiện đã chết), nhưng nó có tất cả những lợi ích mà tôi có thể đã tự gõ theo cách thủ công.)

Chế độ xem có những lợi ích sau:

  • Bảo mật - Chế độ xem có thể được cung cấp cho người dùng trong khi các bảng bên dưới không thể truy cập trực tiếp. Điều này cho phép DBA chỉ cung cấp cho người dùng dữ liệu họ cần, đồng thời bảo vệ các dữ liệu khác trong cùng một bảng.
  • Tính đơn giản - Chế độ xem có thể được sử dụng để ẩn và sử dụng lại các truy vấn phức tạp.
  • Đơn giản hóa hoặc làm rõ tên cột - Chế độ xem có thể được sử dụng để cung cấp bí danh cho tên cột để làm cho chúng dễ nhớ và / hoặc có ý nghĩa hơn.
  • Stepping Stone - Chế độ xem có thể cung cấp bước đệm trong truy vấn "nhiều cấp". Ví dụ: bạn có thể tạo chế độ xem truy vấn đếm số lần bán hàng mà mỗi nhân viên bán hàng đã thực hiện. Sau đó, bạn có thể truy vấn chế độ xem đó để nhóm những người bán hàng theo số lần bán hàng mà họ đã thực hiện.

Bởi vì tôi thích câu trả lời của bạn và không thấy nhiều điểm cần thêm một điểm khác, tôi có thể đề xuất hai cách bổ sung vào danh sách của bạn không? Chế độ xem được lập chỉ mục có thể tăng hiệu suất. Chạy bản cập nhật chống lại quan điểm chứ không phải trực tiếp đến bảng có thể cung cấp sự tự tin cao hơn, bạn sẽ không sai cập nhật rằng bảng sản xuất chính :)
David Hall

Một điểm nữa trong danh sách của bạn, hầu hết các DBA đều muốn sử dụng chế độ xem vì họ có thể điều chỉnh một chế độ xem và hầu hết (không phải luôn luôn) tất cả các truy vấn sử dụng chế độ xem đó sẽ được đào.
Nitin Midha

Đây là câu trả lời 99% trong cuốn sách của tôi.
John Steedman 17/10/13

BTW @ David vỡ liên kết
Manuel Jordan

Điểm cuối cùng, chúng ta không thể sử dụng bảng tạm thời cho điều đó?
Jiechao Wang

16

Một số lý do từ Wikipedia :

Chế độ xem có thể cung cấp lợi thế so với bảng:

  1. Chế độ xem có thể đại diện cho một tập hợp con của dữ liệu có trong một bảng
  2. Chế độ xem có thể kết hợp và đơn giản hóa nhiều bảng thành một bảng ảo duy nhất
  3. Chế độ xem có thể hoạt động như các bảng tổng hợp , nơi công cụ cơ sở dữ liệu tổng hợp dữ liệu (tổng, trung bình, v.v.) và trình bày kết quả được tính toán như một phần của dữ liệu
  4. Chế độ xem có thể che giấu sự phức tạp của dữ liệu ; ví dụ: một chế độ xem có thể xuất hiện dưới dạng Sales2000 hoặc Sales2001, phân vùng rõ ràng bảng cơ sở thực tế
  5. Chế độ xem chiếm rất ít không gian để lưu trữ ; cơ sở dữ liệu chỉ chứa định nghĩa của một dạng xem, không phải bản sao của tất cả dữ liệu mà nó trình bày
  6. Tùy thuộc vào công cụ SQL được sử dụng, các khung nhìn có thể cung cấp bảo mật bổ sung
  7. Chế độ xem có thể giới hạn mức độ hiển thị của bảng hoặc các bảng với thế giới bên ngoài

14

VIEWS có thể được sử dụng như các phần có thể sử dụng lại của CHỌN / MÃ, có thể được đưa vào các lựa chọn / truy vấn khác sẽ được kết hợp và sử dụng nhiều bộ lọc khác nhau mà không cần phải tạo lại toàn bộ CHỌN mỗi lần.

Điều này cũng đặt logic vào một vị trí duy nhất, do đó bạn không phải thay đổi nó trên toàn bộ cơ sở mã.

Hãy xem

Lựa chọn giữa các thủ tục được lưu trữ, hàm, chế độ xem, kích hoạt, SQL nội tuyến

Vẻ đẹp chính của một khung nhìn là nó có thể được sử dụng như một bảng trong hầu hết các tình huống, nhưng không giống như một bảng, nó có thể đóng gói các phép tính rất phức tạp và các phép nối thường được sử dụng. Nó cũng có thể sử dụng khá nhiều đối tượng trong db ngoại trừ các thủ tục được lưu trữ. Chế độ xem hữu ích nhất khi bạn luôn cần tham gia cùng một tập hợp các bảng, nói một Đơn hàng với Chi tiết Đơn hàng để nhận các trường tính toán tóm tắt, v.v.


6
Hãy rất cẩn thận khi làm điều này. Nếu bạn sử dụng các chế độ xem gọi các chế độ xem khác, bạn có thể tạo ra một mớ hỗn độn hiệu suất lớn.
HLGEM

10

Chế độ xem là một lớp trừu tượng và nó thực hiện những gì mà bất kỳ lớp trừu tượng tốt nào làm, bao gồm đóng gói lược đồ cơ sở dữ liệu và bảo vệ bạn khỏi hậu quả của việc thay đổi chi tiết triển khai nội bộ.

Đó là một giao diện.


1
Miễn là bạn không xếp chồng các chế độ xem trên các chế độ xem để có thêm sự trừu tượng.
HLGEM

Tôi nghĩ rằng tôi đã từ chối một cách hiệu quả bất kỳ loại trừu tượng đa cấp nào trong cơ sở dữ liệu quan hệ. Và tôi cũng không gọi các thủ tục được lưu trữ từ các thủ tục được lưu trữ. :)
dkretz

3

Đây là một cách sử dụng rất phổ biến của việc sử dụng các khung nhìn để ràng buộc một thực thể theo một số tiêu chí.

Bảng: USERS chứa tất cả người dùng

Chế độ xem: ACTIVE_USERS chứa tất cả người dùng, ngoại trừ những người bị tạm ngưng, bị cấm, đang chờ kích hoạt và không đáp ứng bất kỳ tiêu chí nào bạn có thể chọn để xác định trong tương lai như một phần của các yêu cầu hoạt động. Điều này khiến bạn không cần phải xóa bất kỳ hàng nào khỏi bảng USERS của mình nếu bạn không chọn vì ACTIVE_USERS luôn có thể ẩn các hàng không mong muốn.

Bằng cách này, bạn có thể sử dụng bảng trong các trang quản lý người dùng của mình nhưng phần còn lại của ứng dụng có thể sử dụng ACTIVE_USERS vì họ có thể là người dùng duy nhất có thể thực thi các quy trình và truy cập / sửa đổi dữ liệu.


2

Chế độ xem có thể cho phép bạn kết hợp dữ liệu từ một số bảng khác nhau và định dạng nó (kết hợp các trường, đặt tên trường có ý nghĩa hơn, v.v.) để người dùng cuối dễ dàng hơn. Chúng là một phần trừu tượng của mô hình cơ sở dữ liệu. Chúng cũng có thể được sử dụng để cấp cho người dùng quyền truy cập vào dữ liệu trong bảng mà không cấp cho họ quyền truy cập trực tiếp vào chính bảng đó.


2

Dưới đây là một số lý do sử dụng chế độ xem thay vì sử dụng bảng trực tiếp

  • Tính đơn giản - Chế độ xem có thể được sử dụng để ẩn các truy vấn phức tạp.
  • Bảo mật - Chế độ xem có thể ẩn một số thông tin quan trọng với người dùng cuối bằng cách tạo chế độ xem trên một số cột đã chọn
  • Bảo mật - Bảng bảo mật để thay đổi cấu trúc của nó bằng cách sử dụng VIEW.
  • Dự phòng - Giảm mã dư thừa trong mọi thủ tục / truy vấn bằng cách sử dụng dạng xem chung.
  • Tính toán - Tất cả các phép tính có thể được thực hiện một lần trong truy vấn dạng xem.
  • Tên có ý nghĩa - Bảng có thể có tên cho id như tbl_org_emp_id có thể có bí danh như [Số nhân viên] hoặc một số tên có ý nghĩa.

Từ imexploring.com


1

Một danh sách nhỏ các lý do / cách sử dụng phổ biến:

  • sử dụng chúng để thay đổi định dạng hoặc 'giao diện' của dữ liệu (nghĩa là bạn có thể kết hợp họ và tên với nhau)

    thực hiện các phép tính hoặc các tra cứu khác trên dữ liệu

    chuẩn hóa dữ liệu (trích xuất dữ liệu từ một số bảng vào một chỗ)


-6

Các quan điểm là xấu xa! Tránh chúng nếu có thể và chỉ sử dụng vì lý do được đề cập bởi DVK - di chuyển dữ liệu tạm thời.

Bạn nên hiểu rằng trong một cơ sở dữ liệu có 100 bảng, rất khó để nhớ mục đích của mọi bảng. Bây giờ, nếu bạn thêm vào đây 300 lượt xem nữa, nó sẽ trở thành một mớ hỗn độn. Hơn so với 'Xem những người yêu thích' có xu hướng sử dụng các chế độ xem lồng nhau và sau đó sử dụng các chế độ xem lồng nhau trong các thủ tục được lưu trữ. Tôi hiện làm việc với một cơ sở dữ liệu nơi có các Chế độ xem được lồng vào sâu 4 lần! Vì vậy, để hiểu một logic đơn giản nhất của một thủ tục được lưu trữ, tôi phải xem qua tất cả các khung nhìn trước tiên.


8
-1 lượt xem là tốt. Chúng có thể trở nên xấu xa nếu bạn sử dụng chúng một cách không phù hợp - nhưng điều đó đúng với bất cứ điều gì.
NullUserException

1
Lượt xem có thể là xấu nếu được sử dụng không tốt. Những người sử dụng chúng một cách tệ hại thường xuyên nhất dường như là những người đang sử dụng chúng để trừu tượng hóa mọi thứ và sau đó làm như bạn nói, gọi các lượt xem gọi lượt xem gọi lượt xem đến mức bạn có thể cần thực hiện hóa 10 triệu lần lặp lại trước khi trả về kết quả bộ 3. Các khung nhìn trực tiếp gọi các bảng có thể rất hữu ích.
HLGEM

@HGLEM có cách nào để hạn chế các cuộc gọi xem từ các chế độ xem khác không?
Igor Soloydenko
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.