2009-08-13 20 views
13

Tôi đang tìm một chính sách mặc định thực hiện để xử lý tiền tố .dbo.The dbo. tiền tố trong tên đối tượng cơ sở dữ liệu, tôi có thể bỏ qua nó không?

Tôi nhận ra rằng dbo. tiền tố là nhiều hơn tiếng ồn cú pháp, tuy nhiên tôi đã trải qua 8 năm qua phát triển dựa trên MS bỏ qua gõ dbo. tiền tố và bỏ qua chức năng của nó.

Ngoài vấn đề về hiệu suất với khóa biên dịch proc được lưu trữ, có một nhược điểm để bỏ qua gõ ".dbo" trong SQLqueries và các thủ tục được lưu trữ?

Nền tảng tiếp theo: Tất cả sự phát triển của tôi là cấp trung gian trên nền web có bảo mật tích hợp dựa trên tài khoản dịch vụ cấp trung gian.

Trả lời

12

[dbo]. [Xxx]

Động cơ SQL Server luôn phân tích truy vấn thành từng miếng, nếu bạn không sử dụng tiền tố chắc chắn nó sẽ tìm kiếm các đối tượng trong tên tương tự với những người dùng khác nhau trước khi nó sử dụng [ dbo]. Tôi sẽ đề nghị bạn làm theo các cơ chế tiền tố không chỉ để đáp ứng các thực hành tốt nhất, cũng để tránh ổn định hiệu suất và làm cho mã có thể mở rộng.

Tôi không biết tôi đã trả lời câu hỏi của bạn, nhưng đây chỉ là phần kiến ​​thức của tôi

+0

Ok, nghĩ rằng tôi đã nhận được điều đó. Tuy nhiên bây giờ tôi đang bối rối về mối quan hệ giữa (1) "dbo." như một cơ chế không gian tên lược đồ, (2) vai trò chủ sở hữu cơ sở dữ liệu SQL Server và (3) người dùng có thể ánh xạ tới tiền tố lược đồ và/hoặc là thành viên của vai trò chủ sở hữu databAse. –

+0

nhưng ngữ cảnh khôn ngoan nếu một Nhóm/Vai trò/Người dùng sở hữu một đối tượng không có lý do anh ta sở hữu/là thành viên cho dbo. Chúng tạo ra các lược đồ chỉ khi chúng cần đa dạng hóa các quyền đối với Object. Hy vọng nó đã giúp. –

+0

Tôi không nghĩ rằng đó là thực hành tốt nhất. Một số nhà cung cấp dịch vụ lưu trữ thay đổi dbo thành một thứ gì đó ngu ngốc .. thì sao? Thay đổi tất cả dbo sang tiền tố ngu ngốc của họ. Ai biết tại sao .. nhưng họ làm điều đó và chúng ta không thể thay đổi nó; yay. – ppumkin

9

Hầu hết thời gian bạn có thể bỏ qua. Đôi khi bạn sẽ phải gõ nó. Đôi khi bạn phải gõ nó, bạn chỉ có thể gõ thêm '':

SELECT * FROM [LinkedServer].[Database]..[Table] 

Bạn sẽ cần phải bắt đầu xem cho nó nếu bạn bắt đầu sử dụng schemas thêm nhiều hơn, nơi bạn có thể có hai schemas trong cùng một cơ sở dữ liệu mà cả hai đều có bảng có cùng tên.

2

"tuy nhiên tôi đã trải qua 8 năm qua phát triển dựa trên MS bỏ qua gõ dbo. Prexfix và bỏ qua chức năng của nó."

Đây là câu trả lời của bạn. Nếu DB của bạn hoạt động tốt, bạn vẫn ổn. Các phương pháp hay nhất không thay thế thử nghiệm thực sự trên hệ thống thực tế của bạn. Nếu hiệu suất của bạn là tốt và bảo trì là OK, thời gian của bạn là tốt hơn chi tiêu ở những nơi khác, nơi bạn có thể nhận được bang tốt hơn cho buck ngôn ngữ của bạn.

+3

Wow ... Tôi không thể không đồng ý nhiều hơn ... Thực tiễn tốt nhất là những gì các từ nói. Trong khi bạn nói đúng là bạn có thể "tránh xa nó" thì đó vẫn là lập trình nghiệp dư cẩu thả. – PseudoToad

1

Sau khi làm việc trong thế giới oracle, tôi khuyên bạn không nên bỏ qua việc khai báo lược đồ. Hãy nhớ rằng các phiên bản máy chủ SQL sau 7.0 hỗ trợ nhiều lược đồ cho mỗi cơ sở dữ liệu - điều quan trọng là phải phân biệt giữa chúng để chắc chắn rằng bạn đang nắm lấy các bảng thích hợp.

Nếu bạn có thể đảm bảo rằng bạn sẽ không bao giờ có hai không gian tên lược đồ riêng biệt cho mỗi cơ sở dữ liệu, thì bạn có thể bỏ qua nó. The dbo. tiền tố không nên làm gì để ảnh hưởng đến hiệu suất của chính nó - phân tích cú pháp là một phần nhỏ của truy vấn SQL là không đáng kể.

3

Vấn đề chính không phải là bảo mật, là giải pháp xung đột tên, trong trường hợp ứng dụng của bạn sẽ được triển khai song song với ứng dụng khác sử dụng cùng tên trong cơ sở dữ liệu.

Nếu bạn đóng gói và bán sản phẩm của mình, tôi đặc biệt khuyên bạn nên sử dụng lược đồ, vì lợi ích của costumers của bạn. Nếu bạn phát triển cho một người mua sắm cụ thể, thì không quá quan tâm.

+0

Điều này không cho phép * không * bằng cách sử dụng dbo. tiền tố trong tất cả các mã của bạn? Nếu bạn bỏ dbo ra. tiền tố, sau đó ứng dụng của bạn có thể dễ dàng chạy dưới một lược đồ khác. Nếu bạn có tất cả các tên bảng một cách rõ ràng đủ điều kiện như dbo.x thì bạn không thể thay đổi sang một lược đồ khác mà không cần tìm kiếm và thay thế thông qua toàn bộ codebase của bạn. Vì vậy, nếu hai ứng dụng khác nhau đều sử dụng dbo rõ ràng. tiền tố, chúng không thể được triển khai cạnh nhau mà không có nguy cơ xung đột tên. –

3

Có bạn có thể bỏ qua - cho hầu hết các phần - nếu bạn chưa bao giờ tạo ra bất cứ điều gì ngoài (mặc định) "dbo" schema .Một trong những nơi bạn không thể bỏ qua đó là khi gọi một hàm lưu trữ - đó luôn luôn phải có "hai phần" ký hiệu:

select * from dbo.myFunc 

Tuy nhiên, nó được coi là một thực hành tốt nhất để luôn luôn sử dụng "dbo. " tiền tố (hoặc tiền tố lược đồ khác, nếu cơ sở dữ liệu của bạn có nhiều lược đồ).

Marc

Các vấn đề liên quan