Tôi đang thêm một tính năng mới vào mô-đun người dùng cho CMS của mình và tôi đã chặn một khối đường ... Hoặc tôi đoán, một ngã ba trên đường và tôi muốn nhận được một số ý kiến từ stackoverflow trước khi tôi cam kết bất cứ điều gì.
Về cơ bản, tôi muốn cho phép quản trị viên thêm các trường người dùng mới 'thêm' mà người dùng có thể điền vào đăng ký, chỉnh sửa trong hồ sơ của họ và/hoặc được kiểm soát bởi các mô-đun khác. Một ví dụ về điều này sẽ là một trường sinh nhật, một mô tả dài của chính họ, hoặc có thể là điểm người dùng đã kiếm được trên trang web. Không cần phải nói, dữ liệu được lưu trữ sẽ khác nhau và có thể dao động từ số lượng lớn văn bản, đến một giá trị số nguyên nhỏ. Để làm cho vấn đề tồi tệ hơn - tôi muốn có tùy chọn để tìm kiếm dữ liệu này.Cách tốt nhất để lưu trữ dữ liệu người dùng 'bổ sung' trong MySQL?
Bằng cách đó, cách tốt nhất để làm điều này là gì? Ngay bây giờ tôi đang hướng tới việc có một bảng với các cột sau đây.
userid, refFieldID, varchar, tinyint, smallint, int, text, date, datetime, etc.
Tôi muốn điều này vì nó sẽ giúp tìm kiếm nhanh hơn đáng kể, và các bảng tham chiếu (Mà giữ tất cả dữ liệu của trường, chẳng hạn như tên của lĩnh vực này, cho dù đó là tìm kiếm hay không, vv) có thể tham chiếu cột nào sẽ được sử dụng khi lưu trữ dữ liệu cho trường đó. Một ý tưởng khác, được gợi ý cho tôi và tôi đã nhìn thấy được sử dụng trong các giải pháp khác (vBulletin là một, mặc dù tôi đã thấy những người khác có tên thoát khỏi tôi vào lúc này), nơi bạn chỉ có userid, id tham chiếu và một trường văn bản. Tôi không biết đủ về MySQL để nói điều này với bất kỳ sự chắc chắn nào, nhưng phương pháp này có vẻ như sẽ chậm hơn để tìm kiếm và có thể có chi phí lớn hơn.
Vậy phương pháp nào là 'tốt nhất'? Có phương pháp nào khác mà tôi đang thiếu không? Cho dù phương pháp nào tôi sử dụng, nó cần phải nhanh chóng tìm kiếm, không lớn (Một chút chi phí trên không), và tốt nhất là cho phép các truy vấn phức tạp được sử dụng dựa vào dữ liệu.
Xin cảm ơn, tôi đã thực sự sẽ trả lời người đầu tiên đồng ý với # 1, cột nào để chọn - nhưng tôi đoán tôi không phải làm nữa :). Về bài đăng của bạn - bạn có nghĩa là văn bản VÀ blob, int VÀ bigint? Hay cái này hay cái kia? Ngoài ra, bạn cảm thấy thế nào về việc thêm cột 'bool' (tinyint (1))? Tôi có thể thấy rằng rất hữu ích và có thể được sử dụng rất nhiều - liệu nó có đáng để lưu 3 byte không, theo ý kiến của bạn? Ngoài ra, số cột có tăng kích thước của một hàng trên đĩa không? Các cột trống, tất nhiên. Tôi không nghi ngờ bố cục bàn (tuyệt vời) của bạn, chỉ tò mò thôi. – Jon
1 cho mỗi mục trong danh sách của tôi, vì vậy 3 hoặc 4 cột tổng, tùy thuộc vào việc bạn có muốn hỗ trợ nổi không. Đối với tinyint (1) - lưu trữ chúng trong cột số nguyên. Bạn đang lãng phí một byte bằng cách thêm tinyint (1), không lưu 3. Mỗi hàng trong bảng của bạn luôn có cùng chiều rộng trong MySQL - hoạt động giống nhau trong hầu hết các RDBMS khác. (Làm thế nào varchars ảnh hưởng đến điều này được một chút phức tạp.) "Chiều rộng" cũng được gọi là "kích thước hàng." – wuputah