2013-05-06 51 views
7

Ok, có thể điều này quá rộng đối với StackOverflow, nhưng có cách nào tốt, tổng quát để tập hợp dữ liệu trong các bảng quan hệ thành JSON phân cấp không?Cách tổng quát để trích xuất JSON từ cơ sở dữ liệu quan hệ?

Ví dụ: giả sử chúng ta có bảng "khách hàng" và bảng "đơn đặt hàng". Tôi muốn kết quả trông giống như sau:

{ 
    "customers": [ 
     { 
      "customerId": 123, 
      "name": "Bob", 
      "orders": [ 
       { 
        "orderId": 456, 
        "product": "chair", 
        "price": 100 
       }, 
       { 
        "orderId": 789, 
        "product": "desk", 
        "price": 200 
       } 
      ] 
     }, 
     { 
      "customerId": 999, 
      "name": "Fred", 
      "orders": [] 
     } 
    ] 
}  

Tôi không cần phải viết nhiều mã thủ tục để lặp lại bảng chính và tìm nạp đơn hàng cùng một lúc và đính kèm chúng. Nó sẽ rất chậm.

Cơ sở dữ liệu tôi đang sử dụng là MS SQL Server, nhưng tôi sẽ sớm phải làm điều tương tự với MySQL. Tôi đang sử dụng Java và JDBC để truy cập. Nếu một trong hai cơ sở dữ liệu này có một số cách ma thuật để lắp ráp các bản ghi này, thì nó sẽ là lý tưởng.

Làm cách nào để mọi người di chuyển từ cơ sở dữ liệu quan hệ sang cơ sở dữ liệu JSON như MongoDB?

+0

Haha. Hah. Haaahaha .. tốt nhất: D SQL Server có thể thực hiện các truy vấn * cho đầu ra XML * (như một tính năng của nhà cung cấp), nhưng không có * quy định chuẩn nào cho tác vụ này trong SQL *. Việc sử dụng ORM/mapper thích hợp có thể làm cho các máy khách * * đó (có lẽ trong một dịch vụ web?) Dễ dàng hơn. (Tôi thấy quá trình này là "tương đối không đau" trong C#/LINQ, nhưng có khả năng các công cụ được thiết kế riêng cho bản đồ này.) – user2246674

+0

bạn có nghĩa là một bộ sưu tập tài liệu, 1 tài liệu cho mỗi khách hàng với mảng cho đơn hàng của họ, phải không? – Drew

+1

chỉ cần đưa em đến một csv hoặc json và sử dụng mongoimport – Drew

Trả lời

-1

Không có cách tổng quát vì SQL Server không hỗ trợ JSON làm kiểu dữ liệu của nó. Bạn sẽ phải tạo "cách tổng quát" của riêng mình cho việc này.

Khám phá bài viết này. Có những ví dụ tốt về cách thao tác dữ liệu máy chủ sql sang định dạng JSON.

https://www.simple-talk.com/blogs/2013/03/26/sql-server-json-to-table-and-table-to-json/

+0

Đây là một cách hay để quản lý dữ liệu JSON (và XML và quan hệ) trong SQL Server theo cách tổng quát: https://www.simple-talk.com/sql/ t-sql-programming/tiêu thụ-json-strings-in-sql-server/ – rainabba

0

Tôi nghĩ rằng một giải pháp 'tổng quát' sẽ như sau: -

  1. Tạo một truy vấn 'chọn' sẽ tham gia tất cả các bảng cần thiết để lấy kết quả trong một mảng dimentional 2 (như CSV/bảng tạm thời, vv)
  2. 012.
  3. Nếu mỗi hàng của phép nối này là duy nhất, và lược đồ MongoDB và các cột có một ánh xạ một, thì tất cả về việc nhập khẩu CSV/Bảng này bằng lệnh MongoImport với các tham số bắt buộc.
  4. Nhưng trường hợp như trên, trong đó một ID khách hàng nhất định có thể có một mảng của 'đơn đặt hàng', cần một số tính toán trước mongoImport.
    Bạn sẽ phải viết một chương trình có thể 'dọc hợp nhất' các đơn đặt hàng cho một ID khách hàng nhất định. Đối với một tập dữ liệu nhỏ, một chương trình java đơn giản sẽ hoạt động. Nhưng đối với các bộ lớn hơn, lập trình song song sử dụng tia lửa có thể thực hiện công việc này.