Tại sao cơ sở dữ liệu quan hệ chỉ chấp nhận truy vấn SQL?


15

Theo như tôi biết, hầu hết các cơ sở dữ liệu quan hệ không cung cấp bất kỳ API cấp trình điều khiển nào cho các truy vấn, ngoại trừ một queryhàm lấy chuỗi SQL làm đối số.

Tôi đang nghĩ sẽ dễ dàng hơn thế nào nếu có thể làm:

var result = mysql.select('article', {id: 3})

Đối với các bảng đã tham gia, nó sẽ phức tạp hơn một chút, nhưng vẫn có thể. Ví dụ:

var tables = mysql.join({tables: ['article', 'category'], on: 'categoryID'});
mysql.select(tables, {'article.id': 3}, ['article.title', 'article.body', 'category.categoryID'])

Mã sạch hơn, không có phân tích cú pháp chuỗi, không có vấn đề tiêm, sử dụng lại các yếu tố truy vấn dễ dàng hơn ... Tôi có thể thấy rất nhiều lợi thế.

Có một lý do cụ thể tại sao nó được chọn để chỉ cung cấp quyền truy cập vào các truy vấn thông qua SQL không?


14
Ví dụ đầu tiên của bạn làm gì mà ORM chưa cung cấp?
Robert Harvey

4
Cách của bạn sẽ hoạt động tốt nếu điều duy nhất bất cứ ai từng làm là các truy vấn đơn giản.
Blrfl

5
@RobertHarvey Không có gì. Nhưng nó cần phải được chuyển đổi sang SQL. Vấn đề của tôi là tại sao chúng ta không thể truy cập cấp trình điều khiển vào các hoạt động thao tác dữ liệu.
lortabac

20
Đối với tôi điều này giống như hỏi tại sao các lò nướng bánh không chấp nhận Kem.
HLGEM

2
Ai đó đã nghĩ về những gì bạn đang nghĩ và tiến thêm một bước và do đó ORM đã ra đời.
Người đàn ông Muffin

Câu trả lời:


33

Cơ sở dữ liệu đã hết quy trình - chúng thường chạy trên một máy chủ khác. Vì vậy, ngay cả khi bạn đã có API, nó sẽ cần gửi một cái gì đó qua dây đại diện cho truy vấn của bạn và tất cả các phép chiếu, bộ lọc, nhóm, truy vấn con, biểu thức, tham gia, hàm tổng hợp của nó, v.v ... Đó có thể là XML hoặc JSON hoặc một số định dạng độc quyền, nhưng cũng có thể là SQL vì nó đã được thử, kiểm tra và hỗ trợ.

Ngày nay, việc tự xây dựng các lệnh SQL ít phổ biến hơn - nhiều người sử dụng một số loại ORM. Mặc dù cuối cùng chúng chuyển thành các câu lệnh SQL, nhưng chúng có thể cung cấp API mà bạn đang theo dõi.


17
Tôi không đồng ý về việc xây dựng các lệnh SQL bằng tay. ORM là tốt cho các mô hình dữ liệu rất đơn giản. Bất cứ điều gì ngoài tầm thường bạn đang viết lớp SQL của riêng bạn.
Martin York

2
Tôi sẽ chơi quỷ ủng hộ và lưu ý hơn bất kỳ ORM hợp lý nào có thể được cấu hình để đáp ứng nhu cầu của ứng dụng.
bunglestink

7
@LokiAstari: Đúng, nhưng những thứ CRUD tầm thường có thể chiếm tới 80% hoặc hơn ứng dụng của bạn.
Robert Harvey

@Tim, điểm tuyệt vời. Trong thực tế, cú pháp giả định được đề xuất trong câu hỏi trông rất giống với JSON.
John M Gant

JSON là một định dạng đóng gói và truyền dữ liệu, không phải là ngôn ngữ.
Craig

35

Bởi vì SQL cung cấp một API chung. Bạn có thể viết trình điều khiển tuân thủ SQL ANSI 92 phát ra SQL và hiển thị API mà bạn mong muốn. Là một phần thưởng đặc biệt, nó sẽ hoạt động với hầu hết mọi cơ sở dữ liệu SQL mà không cần viết lại.

Nếu nó được thực hiện theo cách của bạn, mỗi cơ sở dữ liệu SQL sẽ có một API khác nhau. Tất nhiên trừ khi tất cả chúng ta đều chuẩn hóa API của bạn. Nhưng sau đó, chúng ta sẽ có SQL một lần nữa, ít nhiều, phải không? Ngoại trừ việc API của bạn dường như là ngôn ngữ lập trình cụ thể, trong khi SQL thì không.


7

Có nhiều việc phải làm trên cơ sở dữ liệu cho mục đích quản trị, vì vậy việc có thể viết kịch bản và gửi văn bản để thêm người dùng, chạy sao lưu, tải dữ liệu, thay đổi lược đồ, v.v. Hầu hết các DBA sẽ không muốn làm điều này trong một số ngôn ngữ lập trình khác.

Nếu DBA muốn bám vào SQL, bạn phải có ngôn ngữ khác, cơ sở dữ liệu sẽ có gánh nặng xử lý cả hai.

Có nhiều tính năng mới trong cơ sở dữ liệu, vì vậy tôi không nghĩ rằng chúng đang bị trì trệ. Họ chỉ không làm những gì bạn đề xuất vì một số lý do.

SQL Server có khả năng thực thi mã .NET từ bên trong thông qua SQL CLR. Điều này hữu ích cho một số nhiệm vụ không phù hợp với mô hình quan hệ, nhưng muốn duy trì hiệu suất. Tôi nhận ra đây không phải là những gì bạn đang tìm kiếm. Đó là một ví dụ về nhiều thứ mà cơ sở dữ liệu đang làm.

Nó sẽ không biến mất bất cứ lúc nào sớm. Một trong những cơ sở dữ liệu gần đây được tung ra thị trường là NuoDB . Họ giữ SQL, cung cấp ACID trong khi thêm khả năng phân phối máy chủ và chạy nó trong đám mây. Bạn có thể muốn xem xét lý do tại sao họ gặp phải tất cả những rắc rối đó để thúc đẩy việc tiếp tục SQL (Không phải lý do duy nhất của họ, nhưng đó là một điểm bán hàng rất lớn.).


Mã .NET trong SQL Server không thực sự chạy bên trong công cụ cơ sở dữ liệu. Đó là mã .NET được biên dịch thành một cụm trên máy chủ và các thủ tục được lưu trữ được quy cho các phương thức lớp tĩnh mà máy chủ cơ sở dữ liệu biết cách gọi. Các phương thức sử dụng một nhà cung cấp dữ liệu và tạo kết nối đến cơ sở dữ liệu như bất kỳ mã .NET nào khác. Bạn có một tình huống tương tự với cơ sở dữ liệu (Oracle, Sybase) hỗ trợ các thủ tục lưu trữ Java. Mặt khác, SQL là "giao diện gốc" của cơ sở dữ liệu, tương tự trên hầu hết các sản phẩm cơ sở dữ liệu và thực sự được phân tích cú pháp và thực thi trực tiếp trong cơ sở dữ liệu.
Craig

@Craig - Điểm tuyệt vời.
JeffO

3

SQL DBMS cung cấp quyền truy cập được tối ưu hóa đáng kể vào cửa hàng thông qua ngôn ngữ bản địa và nhiều ngôn ngữ, như bạn lưu ý không cung cấp API nào khác.

Quan sát rằng cơ sở dữ liệu nằm ngoài quy trình không áp dụng trong một số trường hợp và không thực sự liên quan trực tiếp.

Ngay cả các cơ sở dữ liệu yêu cầu sử dụng SQL DML cũng thường cung cấp thư viện con trỏ để cung cấp quyền truy cập iterator vào tập kết quả và Microsoft DBMS nổi tiếng và truy cập SQL DBMS đều cung cấp giao diện bản ghi trực tiếp cho các bảng riêng lẻ trong cơ sở dữ liệu dưới dạng cơ chế để truy cập hiệu suất rất cao trong các trường hợp cụ thể.

Như đã lưu ý, các truy vấn phức tạp sử dụng cú pháp như vậy sẽ tái tạo hành vi của cơ sở dữ liệu mạng từ cuối thập niên 70.

Các cơ chế truy cập thay thế ít hấp dẫn hơn đối với người dùng chính do không quen thuộc, nhưng sự tăng trưởng về mức độ phổ biến của cơ sở dữ liệu NoQuery có thể làm tăng sự quan tâm đến các API khác để đạt được hiệu suất cụ thể. Có vẻ như ít người khác đề nghị một cách tiếp cận như vậy.

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.