Tôi đang xem xét sử dụng loại cột jsonb
của PostgreSQL cho một dự án phụ trợ mới mà chủ yếu sẽ phục vụ như là một API JSON REST-ful. Tôi tin rằng jsonb
của PostgreSQL sẽ phù hợp với dự án này vì nó sẽ cung cấp cho tôi các đối tượng JSON mà không cần chuyển đổi trên chương trình phụ trợ.jsonb và khóa chính/khóa ngoài: hoạt động tốt hơn trong PostgreSQL?
Tuy nhiên, tôi đã đọc rằng loại dữ liệu jsonb
làm chậm khi khóa được thêm vào và lược đồ của tôi sẽ cần sử dụng khóa chính và tham chiếu khóa ngoài. Tôi đã tự hỏi nếu có các khóa chính/khóa ngoài trong cột riêng của chúng (theo cách cơ sở dữ liệu quan hệ tiêu chuẩn) và sau đó có một cột jsonb
cho phần còn lại của dữ liệu sẽ mang lại lợi ích, hoặc điều này sẽ gây ra vấn đề (cho dù bây giờ hoặc xuống đường)?
Nói tóm lại, sẽ:
table car(id int, manufacturer_id int, data jsonb)
thực hiện tốt hơn hoặc tồi tệ hơn:
table car(data jsonb)
Đặc biệt là khi nhìn lên các phím nước ngoài thường xuyên?
Có những nhược điểm nào cho cái đầu tiên, từ góc độ hiệu suất hoặc lược đồ không?
Tại sao bạn muốn sử dụng 'jsonb'? Có vẻ như bạn có một lược đồ cố định nhiều hơn hoặc ít hơn và chuyển đổi các hàng thành JSON phải đủ nhanh mà bạn không cần phải lo lắng về nó. –
Câu hỏi hay: Tôi có ý tưởng tốt về các mối quan hệ mà lược đồ của tôi sẽ cần, nhưng tại thời điểm này tôi không có sự hiểu biết cụ thể về thông tin mà mỗi bảng sẽ cần, và trong khi tôi có thể di chuyển cơ sở dữ liệu mỗi lần Tôi nghĩ điều đó, tôi nghĩ rằng việc sử dụng jsonb sẽ cho phép tôi thực hiện tốt cùng với một cách dễ dàng để thêm mọi thứ một cách nhanh chóng. Có lẽ sau đó xuống đường, một khi tôi có một sự hiểu biết cụ thể hơn về các dữ liệu cần thiết tôi có thể quay trở lại một thiết lập quan hệ tốt. Nhưng đó là bên cạnh điểm của câu hỏi, đó là: liệu một người có thực hiện tốt hơn/tệ hơn người kia không? –
Nhưng bạn sẽ phải thực hiện một loạt di chuyển để viết lại JSON của bạn, một vài ALTER TABLE ở đây và không đáng sợ và nếu sau đó chúng viết lại tất cả dữ liệu và mã của bạn để theo dõi một lược đồ thay đổi liên tục đáng sợ hơn. Theo như trả lời câu hỏi, trước tiên bạn cần phải đặt câu hỏi đúng. Tôi nghĩ rằng bạn cần phải tìm ra dữ liệu của bạn trông như thế nào trước khi bạn bắt đầu trượt dữ liệu xung quanh. Nếu bạn nghĩ rằng bạn đang đi để cánh nó và sau đó quay trở lại và thiết kế lại cơ sở dữ liệu bạn gần như chắc chắn sai, nó sẽ không xảy ra. –