2010-03-22 28 views
15

SQLite3 sử dụng gõ động thay vì nhập tĩnh, trái ngược với các hương vị khác của SQL. Số SQLite website lần đọc:Nhập động của SQLite3

Hầu hết các công cụ cơ sở dữ liệu SQL (mọi công cụ cơ sở dữ liệu SQL khác với SQLite, theo như chúng ta biết) đều sử dụng kiểu gõ tĩnh, cứng nhắc. Với kiểu gõ tĩnh, kiểu dữ liệu của một giá trị được xác định bởi vùng chứa của nó - cột cụ thể trong đó giá trị được lưu trữ.

SQLite sử dụng hệ thống kiểu động tổng quát hơn. Trong SQLite, kiểu dữ liệu của một giá trị được liên kết với chính giá trị, chứ không phải với vùng chứa của nó.

Dường như với tôi rằng đây chính là điều bạn không muốn, vì nó cho phép bạn lưu trữ, ví dụ, các chuỗi trong cột số nguyên.

Trang tiếp tục:

... gõ phím năng động trong SQLite cho phép nó để làm điều đó là không thể thực hiện trong cơ sở dữ liệu cứng nhắc gõ truyền thống.

Tôi có hai câu hỏi:

  1. Việc sử dụng trường hợp câu hỏi: một số ví dụ nơi gõ động SQLite3 là có lợi là gì?
  2. Câu hỏi lịch sử/thiết kế: Động lực để triển khai SQLite với tính năng nhập động là gì?
+1

Quan sát của tôi là sqlite3 phụ thuộc nhiều hơn vào phần mềm làm cho nó trở nên thông minh hơn, ví dụ như đếm số nguyên không lưu trữ số nguyên trong cột chuỗi, thay vì tự cung cấp cấu trúc. – avpx

+0

Đây là loại câu hỏi thảo luận thường tốt hơn như Cộng đồng Wiki, nhưng nói chung, một câu hỏi nghèo cho định dạng của SO. Hãy thử hỏi * một * câu hỏi cho mỗi .. câu hỏi, và nó là thích hợp hơn để được cụ thể hơn là mở kết thúc. http://stackoverflow.com/faq –

Trả lời

9

Điều này được gọi là type affinity trong SQLite.

Theo trang web SQLite, họ đã thực hiện việc này "để tối đa hóa khả năng tương thích giữa SQLite và các công cụ cơ sở dữ liệu khác". (xem liên kết ở trên)

SQLite hỗ trợ khái niệm "loại ái lực" trên cột. Loại ái lực của một cột là loại được đề xuất cho dữ liệu được lưu trữ trong cột đó. Ý tưởng quan trọng ở đây là loại được khuyến khích, không bắt buộc. Bất kỳ cột nào vẫn có thể lưu trữ bất kỳ loại dữ liệu nào. Nó chỉ là một số cột, được lựa chọn, sẽ thích sử dụng một lớp lưu trữ hơn một lớp khác. Lớp lưu trữ ưu tiên cho một cột được gọi là "ái lực" của nó.

Sự hiểu biết của tôi là SQLite chính xác là tên được đặt cho - một công cụ cơ sở dữ liệu rất nhỏ gọn, tối giản. Chi phí liên quan đến việc gõ mạnh có lẽ nằm ngoài phạm vi của dự án, và tốt nhất còn lại cho ứng dụng sử dụng SQLite.

Nhưng một lần nữa, theo trang web của họ, họ đã làm điều này để tối đa hóa khả năng tương thích với các công cụ DB khác.

+0

> Điều này được gọi là loại mối quan hệ trong SQLite. "Loại mối quan hệ" là một khía cạnh cụ thể của cách gõ động của sqlite --- cột có loại được đề xuất, nhưng các giá trị thực tế là miễn phí đối với các loại khác. > Theo trang web SQLite, họ đã thực hiện việc này "để tối đa hóa khả năng tương thích giữa SQLite và các công cụ cơ sở dữ liệu khác". Có, họ nói như vậy, nhưng nó liên quan đến loại sở thích, chứ không phải là gõ động nói chung. –

+5

Về "chi phí liên quan đến nhập mạnh": Giả sử bạn thực tế có nghĩa là "nhập tĩnh": Tôi cho rằng sử dụng nhập tĩnh sẽ cho phép triển khai hiệu quả hơn _more_ so với nhập động. Ví dụ: bộ nhớ có thể nhỏ gọn hơn và có thể tránh được nhiều loại kiểm tra khi truy vấn. –

+0

Tôi xin lỗi vì định dạng của các nhận xét trước đó: Tôi nghĩ rằng đánh dấu đã được cho phép. Tôi là người mới ở đây. –

4

Nếu bạn nhìn vào trang "about: config" của Firefox, tôi tin rằng các cài đặt này thực sự được lưu trữ trong cơ sở dữ liệu SQlite (tôi không chắc chắn 100%). Lợi ích của việc sử dụng tính năng nhập động của SQlite là mỗi giá trị trong cài đặt có thể được nhập mạnh (ví dụ: cài đặt "alerts.totalOpenTime" là số nguyên, trong khi "app.update.channel" là một chuỗi) mà không cần phải có một giá trị riêng biệt cột cho mỗi loại.

Về cơ bản, nó cũng giống như đối với ngôn ngữ lập trình: cuối cùng, tại sao có gõ động trong ngôn ngữ lập trình bằng cách gõ tĩnh?

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