2009-04-02 34 views
5

Dường như với tôi, từ cả trải nghiệm cá nhân lẫn SO câu hỏi và câu trả lời, việc triển khai SQL khác nhau đáng kể. Một trong những vấn đề đầu tiên đối với câu hỏi SQL là: Bạn đang sử dụng dbms nào?Tính quan trọng của SQL là gì?

Trong hầu hết các trường hợp với SQL, có một số cách để cấu trúc truy vấn đã cho, thậm chí sử dụng cùng một phương ngữ. Nhưng tôi thấy thú vị là tính di động tương đối của các cách tiếp cận khác nhau thường không được thảo luận, cũng không có giá trị rất cao khi nó được.

Nhưng thậm chí bỏ qua khả năng bất kỳ ứng dụng cụ thể nào có thể hoặc không bị chuyển đổi, tôi nghĩ rằng chúng tôi muốn các kỹ năng, thói quen và mẫu của chúng tôi càng linh động càng tốt.

Trong công việc của bạn với SQL, bạn thích cú pháp SQL chuẩn như thế nào? Làm thế nào tích cực để bạn tránh các biến thể thích hợp? Vui lòng trả lời mà không tham chiếu đến sở thích độc quyền với mục đích nhận thức được hiệu suất tốt hơn, mà phần lớn sẽ thừa nhận thường là một sự phòng thủ hợp pháp.

Trả lời

6

Chúng tôi rất coi trọng tại cửa hàng của chúng tôi. Chúng tôi không cho phép SQL hoặc các tiện ích không chuẩn trừ khi chúng được hỗ trợ trên TẤT CẢ các nền tảng chính. Thậm chí sau đó, chúng được gắn cờ bên trong mã là không chuẩn và cần thiết.

Nhà phát triển ứng dụng không làm cho truy vấn của họ chạy nhanh, chúng tôi có sự phân chia rõ ràng các nhiệm vụ. Truy vấn chỉ được tối ưu hóa bởi chính DBMS hoặc điều chỉnh DBA của DBMS.

Cơ sở dữ liệu thực, như DB2/z :-), xử lý rất nhiều SQL chuẩn nhanh.

Lý do chúng tôi thực thi điều này là cung cấp cho khách hàng lựa chọn. Họ không thích ý tưởng bị nhốt vào một nhà cung cấp cụ thể nào hơn chúng tôi.

+0

Thú vị, tôi nghe những thứ như thế này từ các công ty như SAP. Lý do để giải quyết vấn đề độc lập của nhà cung cấp ở cấp độ sql là gì? –

+0

Không chắc tôi hoàn toàn hiểu được câu hỏi, @Jens. Nếu bạn hỏi tại sao chúng ta thực thi SQL chỉ tiêu chuẩn, nó cho phép dễ dàng chuyển đổi giữa các nhà cung cấp (và nền tảng). Vì vậy, khi MySQL bây giờ còn cắt nó, chúng ta có thể chuyển sang SQL Server, sau đó là DB2/LUW và cuối cùng là DB2/z. Tất cả mà không cần phải thay đổi các ứng dụng. – paxdiablo

+0

/* Nhưng không bao giờ với Oracle, mà vẫn không thể biết sự khác biệt giữa một chuỗi rỗng và NULL :-) */ – paxdiablo

1

Không có câu trả lời rõ ràng cho dù khả năng di động SQL là mong muốn hay không - nó thực sự phụ thuộc rất nhiều vào tình hình, chẳng hạn như loại ứng dụng.

Nếu ứng dụng sẽ là dịch vụ - nghĩa là bạn sẽ chỉ lưu trữ nó, sau đó rõ ràng là không ai nhưng bạn sẽ quan tâm xem SQL của bạn có đủ di động hay không, vì vậy bạn có thể bỏ qua nó một cách an toàn miễn là bạn không có các kế hoạch cụ thể để giảm hỗ trợ cho nền tảng hiện tại của bạn.

Nếu ứng dụng sẽ được cài đặt tại một số trang web, mỗi trang có hệ thống cơ sở dữ liệu được thiết lập riêng, rõ ràng khả năng di động của SQL rất quan trọng đối với mọi người. Nó cho phép bạn mở rộng thị trường tiềm năng của bạn, và có thể cung cấp cho một chút phần của tâm trí cho khách hàng đang trên hàng rào liên quan đến hệ thống cơ sở dữ liệu của họ. Cho dù bạn muốn hỗ trợ điều đó, hoặc bạn chỉ vui lòng bán hàng, ví dụ, khách hàng của Oracle, hoặc chỉ cho khách hàng MySQL/PostgreSQL, chẳng hạn, tùy thuộc vào bạn và bạn nghĩ thị trường của bạn là gì.

Nếu bạn đang viết mã bằng PHP, thì phần lớn các khách hàng tiềm năng của bạn có thể sẽ mong đợi MySQL. Nếu vậy, thì nó không phải là một vấn đề lớn để giả định MySQL. Hoặc tương tự nếu bạn đang ở trong C# /. NET thì bạn có thể giả định Microsoft SQL Server. Một lần nữa, tuy nhiên, có một mặt trái bởi vì có thể tồn tại một thị trường nhỏ nhưng ít cạnh tranh của người dùng PHP hoặc .NET muốn kết nối với các hệ thống cơ sở dữ liệu khác hơn bình thường. Vì vậy, tôi sẽ coi đây là một câu hỏi nghiên cứu thị trường, trừ khi như trong ví dụ đầu tiên của tôi, bạn đang cung cấp dịch vụ được lưu trữ ở đó không quan trọng với người dùng, trong trường hợp đó chỉ là sự thuận tiện của riêng bạn.

12

Tôi bỏ phiếu chống lại tiêu chuẩn/vendor sql độc lập

  • Chỉ hiếm khi cơ sở dữ liệu là thực sự chuyển sang.
  • Không có cơ sở dữ liệu duy nhất hoàn toàn phù hợp với tiêu chuẩn sql hiện tại. Vì vậy, ngay cả khi bạn tuân thủ tiêu chuẩn, bạn không phải là nhà cung cấp độc lập.
  • sự khác biệt của nhà cung cấp vượt quá cú pháp sql. Hành vi khóa là khác nhau. Mức cách ly là khác nhau.
  • kiểm tra cơ sở dữ liệu khá khó khăn và được phát triển. Không cần phải làm cho nó thậm chí còn khó khăn hơn bằng cách ném nhiều nhà cung cấp trong trò chơi, nếu bạn không hoàn toàn cần nó.
  • có rất nhiều quyền lực trong các điều chỉnh dành riêng cho nhà cung cấp.(Suy nghĩ 'giới hạn', hoặc 'chức năng phân tích', hoặc 'gợi ý')

Vì vậy, những tinh hoa: - Nếu không có yêu cầu đối với nhà cung cấp độc lập, được chuyên biệt cho các nhà cung cấp bạn đang thực sự sử dụng. - Nếu có yêu cầu về sự độc lập của nhà cung cấp, hãy đảm bảo rằng ai đã thanh toán hóa đơn, điều này sẽ tốn tiền. Hãy chắc chắn rằng bạn có mọi rdbms đơn có sẵn để thử nghiệm. Và sử dụng nó quá - Đặt mọi phần của sql vào một lớp đặc biệt, có thể cắm được, vì vậy bạn có thể sử dụng sức mạnh của cơ sở dữ liệu VÀ làm việc với các nhà cung cấp khác nhau - Chỉ có sự khác biệt là một câu hỏi thuần túy về cú pháp. , ví dụ sử dụng ký hiệu oracle (tham gia bên ngoài) so với cú pháp chuẩn ANSI.

+0

Yêu cầu thứ hai đó là khiếu nại dũng cảm; nguồn của bạn là gì Bạn có một downvote từ tôi mà tôi sẽ vui vẻ đảo ngược (vì vậy xin vui lòng không trả đũa không cần thiết) nếu bạn sẽ biện minh hoặc loại bỏ yêu cầu bồi thường. Tôi được thông báo một cách đáng tin cậy rằng DB2/z tuân thủ nghiêm ngặt. – paxdiablo

+0

Trừ khi dự án của bạn tuyên bố và nhắm mục tiêu nhiều cơ sở dữ liệu ngay từ đầu, khả năng chuyển đổi là không có gì - không có điểm nào là di động, tôi đồng ý –

+0

Bạn đã đọc câu hỏi chưa? 1. Tôi đã giảm giá chuyển đổi cơ sở dữ liệu. 2. Bạn có nghĩ rằng thiết bị an toàn xe hơi là không thích hợp vì không có xe hơi bị hỏng? 3. Khác biệt về cú pháp là cá trích đỏ. 4. Tôi không ném vào nhiều nhà cung cấp. 5. Và tôi thừa nhận hiệu suất như một quốc phòng hợp pháp. – dkretz

2

Theo kinh nghiệm của tôi, tính di động truy vấn hóa ra không quan trọng lắm. Chúng tôi làm việc với các nguồn dữ liệu khác nhau (chủ yếu là MSSQL và MySQL), nhưng chúng tôi biết dữ liệu nào được lưu trữ ở đâu và có thể tối ưu hóa cho phù hợp. Vì chúng tôi kiểm soát các hệ thống, chúng tôi quyết định khi nào - nếu bao giờ - các cấu trúc được di chuyển và các truy vấn cần phải được viết lại.

Tôi cũng muốn sử dụng một số chức năng cụ thể cho máy chủ khác, chẳng hạn như thông báo truy vấn trong SQL Server, mà MySQL không cung cấp. Vì vậy, ở đó, một lần nữa, chúng tôi sử dụng nó khi chúng ta có thể và không lo lắng về tính di động.

Hơn nữa, các phần của ứng dụng của chúng tôi cần truy vấn thông tin lược đồ và hành động trên đó. Ở đây, một lần nữa, chúng tôi có mã máy chủ cụ thể cho các hệ thống khác nhau, thay vì cố gắng hạn chế bản thân với mẫu số chung thấp nhất.

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