2012-12-14 35 views
7

Chúng ta có tất cả ở đó - hãy xem xét ví dụ sau - trước tiên, khách hàng nói "mọi người dùng chỉ có một ảnh tiểu sử", vì vậy chúng tôi thêm trường cho bảng người dùng - nửa năm sau , yêu cầu thay đổi và người dùng thực sự cần phải có ảnh tiểu sử n.Bàn cơ sở dữ liệu ba chiều

Bây giờ, điều này dường như chỉ có thể nếu bạn thêm một bảng mới như user_pictures để xử lý cardinality mới 1: n thay vì 1: 1. Thông thường, điều này có thể rất phức tạp. Bất cứ khi nào tôi gặp phải vấn đề này, tôi tự hỏi tại sao chúng ta không sử dụng cả ba chiều mà chúng ta có thể nghĩ. Một bảng hai chiều bị giới hạn theo cách nó không hoàn chỉnh - nếu như, đề cập đến vấn đề của chúng ta một lần nữa, trường hình ảnh trong bảng người dùng có độ sâu và độ sâu đó làm cho trường trở thành một mảng biểu diễn hoàn hảo cả hồng y 1: 1 và 1: n cùng một lúc.

Các trường bảng sẽ đơn giản trở thành mảng và tự động hỗ trợ cả hai tấm hình - đó có phải là thứ gì đó không? Ít nhất tôi sẽ sử dụng nó. Có cái gì đó giống như nó ra khỏi đó rồi?

+0

Tất cả các mối quan hệ có thể có giữa "thứ" trong cơ sở dữ liệu (một-một, một-nhiều, nhiều-nhiều), đều được đề cập đến. Điều gì sẽ là một trường hợp sử dụng cho một bảng "ba chiều" - điều đó có nghĩa là gì? – NullUserException

+0

Một trường hợp sử dụng ví dụ là trường hợp trên với hình ảnh hồ sơ: Bạn sẽ cần phải thêm một bảng mới, nhưng điều đó rõ ràng là cồng kềnh. Các mối quan hệ mẫu sẽ cần phải được thay đổi, các truy vấn được cập nhật tương ứng, vv - liên quan đến rất nhiều nỗi đau và công việc. Tôi nghĩ chúng ta có thể làm tốt hơn thế. Sẽ không phải là một lĩnh vực hai chiều, làm cho bảng ba chiều, giải quyết điều đó? – weltschmerz

+1

Cơ sở dữ liệu quan hệ được hỗ trợ bởi một nền tảng rất vững chắc - [đại số quan hệ] (http://en.wikipedia.org/wiki/Relational_algebra). Nó đảm bảo cả hai đều nhanh và chính xác. Đó là một trong những lý do tại sao họ vẫn còn xung quanh khi các loại cơ sở dữ liệu đến và đi qua nhiều năm. Đừng sửa những gì không bị hỏng. – NullUserException

Trả lời

7

Oracle hỗ trợ arrays cũng như nested tables. Hoặc dường như phù hợp với yêu cầu của bạn. Những ngày này, mặc dù mọi người thích mô hình hóa mọi thứ như các bảng và các mối quan hệ để giữ cho mọi thứ đơn giản và nhất quán và RDBMS hiện đại không hỗ trợ công cụ này và tôi không tin nó đã bao giờ biến nó thành SQL chuẩn.

+0

Câu trả lời hay, cảm ơn các liên kết! – weltschmerz

4

Tiêu chuẩn nhiều-nhiều cách tiếp cận, nhiều người dùng với nhiều hình ảnh hồ sơ cá nhân, có thể dễ dàng bao phủ bởi các cách tiếp cận ba bảng:

Bảng: Người dùng
Bảng: Hình
Bảng: User_Pictures

Tuy nhiên, nếu bạn chuyển sang phương pháp NoSQL, bạn có thể lưu trữ tài liệu người dùng (thường là ở định dạng JSON), lưu trữ một loạt ảnh hồ sơ cho người dùng đó trong một bảng duy nhất.

@gordy +1 cho liên kết Oracle. Tôi đã không chắc chắn nếu bất kỳ RDBS cho rằng mảng.

2

Bạn đang mô tả một kỹ thuật không chuẩn hóa (nhiều cột cho các trường hợp của một trường) và thường dẫn đến nước mắt trừ khi bạn hiểu rõ hậu quả của việc vi phạm các nguyên tắc quan hệ cơ bản.

Khó khăn cổ điển xuất hiện khi bạn muốn truy vấn trên trường ("tìm người dùng có ảnh này") và bạn phát hiện thấy câu lệnh SQL có "VÀ ảnh IN (pic1, pic2, pic3)" không thể được lập chỉ mục và trình tối ưu hóa của bạn bắt đầu lên kế hoạch trả thù.

+0

+1 để đề cập đến lập chỉ mục – weltschmerz

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