Khi nào sử dụng Dạng xem thay vì Bảng?


108

Khi nào một Chế độ xem thực sự được sử dụng trên một Bảng thực tế? Tôi nên mong đợi điều này sẽ tạo ra lợi ích gì?

Nhìn chung, lợi ích của việc sử dụng chế độ xem qua bảng là gì? Tôi không nên thiết kế bảng theo cách mà chế độ xem phải như thế nào ngay từ đầu?

Câu trả lời:


80

Ồ, có nhiều điểm khác biệt mà bạn cần phải xem xét

Chế độ xem để lựa chọn:

  1. Chế độ xem cung cấp tính trừu tượng hơn các bảng. Bạn có thể thêm / xóa các trường một cách dễ dàng trong một chế độ xem mà không cần sửa đổi lược đồ cơ bản của mình
  2. Chế độ xem có thể mô hình hóa các phép nối phức tạp một cách dễ dàng.
  3. Chế độ xem có thể ẩn nội dung dành riêng cho cơ sở dữ liệu khỏi bạn. Ví dụ: nếu bạn cần thực hiện một số kiểm tra bằng cách sử dụng chức năng Oracles SYS_CONTEXT hoặc nhiều thứ khác
  4. Bạn có thể dễ dàng quản lý GRANTS của mình trực tiếp trên các khung nhìn, thay vì các bảng thực tế. Sẽ dễ quản lý hơn nếu bạn biết một người dùng nhất định chỉ có thể truy cập vào một chế độ xem.
  5. Chế độ xem có thể giúp bạn tương thích ngược. Bạn có thể thay đổi lược đồ cơ bản, nhưng các chế độ xem có thể ẩn các dữ kiện đó khỏi một ứng dụng khách nhất định.

Lượt xem để chèn / cập nhật:

  1. Bạn có thể xử lý các vấn đề bảo mật với chế độ xem bằng cách sử dụng chức năng như mệnh đề "VỚI CHỌN KIỂM TRA" của Oracle trực tiếp trong chế độ xem

Hạn chế

  1. Bạn mất thông tin về quan hệ (khóa chính, khóa ngoại)
  2. Không rõ liệu bạn có thể chèn / cập nhật một chế độ xem hay không, bởi vì chế độ xem ẩn các liên kết cơ bản của nó khỏi bạn

3
Câu hỏi nhanh: các lượt xem là "vĩnh viễn" hay chúng chỉ tồn tại trong suốt thời gian của phiên? Lý do tôi hỏi: chúng tôi có một hệ thống đôi khi gặp sự cố giữa một quá trình chạy mã dài. Tôi giảm thiểu điều này bằng cách cắn các phần của mã vào các bảng trung gian để lưu kết quả trung gian. Vì vậy, nếu hệ thống kết nối trước khi mã hoàn tất, tôi chỉ phải bắt đầu từ bảng tạm thời đã lưu cuối cùng. Tôi có thể chuyển sang sử dụng các lượt xem nếu chúng cung cấp cùng một tính lâu dài. Nếu không, tôi sẽ tiếp tục làm như vậy và giảm nhiệt độ vào cuối cuộc chạy. Cám ơn!
ouonomos

8
@ouonomos: Chế độ xem bình thường không chứa bất kỳ dữ liệu nào. Nó chỉ là một câu lệnh SQL được lưu trữ, tức là một chế độ xem trên dữ liệu bên dưới. Một số cơ sở dữ liệu (ví dụ: Oracle, PostgreSQL) hỗ trợ các khung nhìn cụ thể hóa, lưu trữ tạm thời "khung nhìn" trong một bảng khác để truy cập nhanh hơn. Điều này được thực hiện để tăng tốc độ truy cập đọc khi chế độ xem phức tạp. Nhưng điều đó không giúp ích được gì cho bạn trong trường hợp của bạn vì chế độ xem vật chất hóa vẫn là một chế độ xem, không phải dữ liệu của chính nó. Cách tiếp cận của bạn có lẽ là OK.
Lukas Eder,

44

Lượt xem có thể:

  • Đơn giản hóa cấu trúc bảng phức tạp
  • Đơn giản hóa mô hình bảo mật của bạn bằng cách cho phép bạn lọc dữ liệu nhạy cảm và chỉ định quyền theo cách đơn giản hơn
  • Cho phép bạn thay đổi logic và hành vi mà không thay đổi cấu trúc đầu ra (đầu ra vẫn giữ nguyên nhưng SELECT bên dưới có thể thay đổi đáng kể)
  • Tăng hiệu suất (Số lượt xem được lập chỉ mục của máy chủ Sql)
  • Cung cấp tối ưu hóa truy vấn cụ thể với chế độ xem có thể khó thu thập nếu không

bạn không nên thiết kế bảng để phù hợp với các góc nhìn . Mô hình cơ sở của bạn nên quan tâm đến việc lưu trữ và truy xuất dữ liệu hiệu quả. Chế độ xem một phần là một công cụ giảm thiểu sự phức tạp phát sinh từ một mô hình chuẩn hóa, hiệu quả bằng cách cho phép bạn tóm tắt sự phức tạp đó.

Ngoài ra, việc hỏi "lợi ích của việc sử dụng chế độ xem qua bảng là gì?" Không phải là một so sánh tuyệt vời. Bạn không thể không có bảng, nhưng bạn có thể làm mà không có khung nhìn. Chúng tồn tại vì một lý do rất khác nhau. Bảng là mô hình cụ thể và Chế độ xem là một Chế độ xem được trừu tượng hóa.


1
Các chế độ xem +1 một phần là một công cụ giảm thiểu sự phức tạp phát sinh từ một mô hình chuẩn hóa, hiệu quả bằng cách cho phép bạn tóm tắt sự phức tạp đó.
metdos

34

Chế độ xem có thể chấp nhận được khi bạn cần đảm bảo rằng logic phức tạp được tuân theo mọi lúc. Ví dụ: chúng tôi có chế độ xem tạo dữ liệu thô cần thiết cho tất cả các báo cáo tài chính. Bằng cách để tất cả các báo cáo sử dụng chế độ xem này, tất cả mọi người đang làm việc từ cùng một tập dữ liệu, thay vì một báo cáo sử dụng một tập hợp các phép nối và một báo cáo khác quên sử dụng một tập hợp cho kết quả khác nhau.

Chế độ xem được chấp nhận khi bạn muốn hạn chế người dùng trong một tập hợp con dữ liệu cụ thể. Ví dụ: nếu bạn không xóa các bản ghi mà chỉ đánh dấu bản hiện tại là hoạt động và các phiên bản cũ hơn là không hoạt động, bạn muốn một dạng xem sử dụng để chỉ chọn các bản ghi đang hoạt động. Điều này tránh cho mọi người quên đặt mệnh đề where trong truy vấn và nhận được kết quả không tốt.

Chế độ xem có thể được sử dụng để đảm bảo rằng người dùng chỉ có quyền truy cập vào một tập hợp các bản ghi - ví dụ: chế độ xem bảng cho một máy khách cụ thể và không có quyền bảo mật trên bảng có thể có nghĩa là người dùng cho máy khách đó chỉ có thể xem dữ liệu cho khách hàng đó.

Chế độ xem rất hữu ích khi cấu trúc lại cơ sở dữ liệu.

Chế độ xem không được chấp nhận khi bạn sử dụng chế độ xem để gọi các chế độ xem có thể dẫn đến hiệu suất khủng khiếp (ít nhất là trong SQL Server). Chúng tôi gần như đã mất một khách hàng triệu đô la vì ai đó đã chọn cách trừu tượng hóa cơ sở dữ liệu theo cách đó và hiệu suất rất khủng khiếp và thường xuyên hết giờ. Chúng tôi cũng phải trả tiền cho bản sửa lỗi, không phải khách hàng, vì vấn đề hiệu suất hoàn toàn là lỗi của chúng tôi. Khi lượt xem gọi lượt xem, chúng phải tạo hoàn toàn chế độ xem bên dưới. Tôi đã thấy điều này trong đó chế độ xem được gọi là chế độ xem được gọi là chế độ xem và rất nhiều hàng triệu bản ghi đã được tạo để xem ba người dùng cuối cùng cần. Tôi nhớ một trong những chế độ xem này đã mất 8 phút để thực hiện đếm đơn giản (*) các bản ghi. Lượt xem gọi lượt xem là một ý tưởng cực kỳ kém.

Chế độ xem thường là một ý tưởng tồi khi sử dụng để cập nhật các bản ghi vì thông thường bạn chỉ có thể cập nhật các trường từ cùng một bảng (đây là SQL Server, các cơ sở dữ liệu khác có thể thay đổi). Nếu đúng như vậy, sẽ tốt hơn nếu bạn cập nhật trực tiếp các bảng để bạn biết trường nào có sẵn.


1
Không biết có sự cố về hiệu suất với chế độ xem gọi điện. Điều đó có vẻ lạ. Điều đó không được xử lý chính xác bởi trình tối ưu hóa truy vấn? Phiên bản SQL Server nào đã được sử dụng trong trường hợp của bạn?
Patrick Honorez

7

Chế độ xem rất hữu ích khi bạn cần chọn từ một số bảng hoặc chỉ để lấy một tập hợp con của bảng.

Bạn nên thiết kế các bảng của mình theo cách mà cơ sở dữ liệu của bạn được chuẩn hóa tốt (tối thiểu trùng lặp). Điều này có thể làm cho việc truy vấn hơi khó khăn.

Chế độ xem có một chút tách biệt, cho phép bạn xem dữ liệu trong các bảng khác với dữ liệu được lưu trữ.


7

Một thực tế phổ biến là ẩn các phép nối trong một dạng xem để hiển thị cho người dùng một mô hình dữ liệu không chuẩn hóa hơn. Các cách sử dụng khác liên quan đến bảo mật (ví dụ: bằng cách ẩn các cột và / hoặc hàng nhất định) hoặc hiệu suất (trong trường hợp chế độ xem cụ thể hóa)


6

Bạn nên thiết kế bảng của bạn mà KHÔNG xem xét các khung nhìn.
Ngoài việc lưu các phép nối và điều kiện, Chế độ xem còn có lợi thế về hiệu suất: Máy chủ SQL có thể tính toán và lưu kế hoạch thực thi của nó trong chế độ xem, và do đó làm cho nó nhanh hơn các câu lệnh SQL "trực tuyến".
Chế độ xem cũng có thể làm giảm bớt công việc của bạn liên quan đến quyền truy cập của người dùng ở cấp trường.


5

Trước hết, như tên cho thấy một chế độ xem là bất biến. đó là bởi vì một khung nhìn không là gì khác ngoài một bảng ảo được tạo từ một truy vấn được lưu trữ trong DB. Vì điều này, bạn có một số đặc điểm của chế độ xem:

  • bạn chỉ có thể hiển thị một tập hợp con của dữ liệu
  • bạn có thể nối nhiều bảng vào một chế độ xem duy nhất
  • bạn có thể tổng hợp dữ liệu trong một chế độ xem (chọn số lượng)
  • chế độ xem không thực sự giữ dữ liệu, chúng không cần bất kỳ vùng bảng nào vì chúng là tập hợp ảo của các bảng bên dưới

do đó, có hàng triệu trường hợp sử dụng mà chế độ xem được trang bị tốt hơn so với bảng, chỉ cần nghĩ đến việc chỉ hiển thị người dùng đang hoạt động trên một trang web. một chế độ xem sẽ tốt hơn vì bạn chỉ hoạt động trên một tập con dữ liệu thực sự có trong DB của bạn (người dùng đang hoạt động và không hoạt động)

kiểm tra bài viết này

hy vọng điều này đã giúp ..


2

Theo Wikipedia ,

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

  • Các khung nhìn có thể đại diện cho một tập hợp con của dữ liệu có trong một bảng.
  • Chế độ xem có thể giới hạn mức độ hiển thị của các bảng bên dưới với thế giới bên ngoài: một người dùng nhất định có thể có quyền truy vấn chế độ xem, trong khi bị từ chối quyền truy cập vào phần còn lại của bảng cơ sở.

  • Chế độ xem có thể nối và đơn giản hóa nhiều bảng thành một bảng ảo duy nhất.

  • 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.

  • Chế độ xem có thể che giấu sự phức tạp của dữ liệu. Ví dụ: một dạng 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ế.

  • 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 là bản sao của tất cả dữ liệu mà nó trình bày.

  • Chế độ xem có thể cung cấp bảo mật bổ sung , tùy thuộc vào công cụ SQL được sử dụng.

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.