2009-08-25 26 views
9

Tôi có một ứng dụng web hiện có và muốn thêm một tính năng thẻ để người dùng có thể gắn thẻ các đối tượng hiện có. Câu hỏi đặt ra là tôi nên thêm một cột thẻ vào từng đối tượng? hoặc tôi nên bình thường hóa nó và sử dụng một bảng thẻ nơi mỗi đối tượng sẽ có một bộ sưu tập các thẻ? Tôi nghiêng về phía sau bởi vì nó cảm thấy sạch hơn, dễ dàng hơn để báo cáo và dễ dàng hơn để tạo một đám mây từ khóa. Nhưng kể từ khi tôi biết điều này đã được giải quyết 1000 lần tôi muốn hỏi và xem nếu tôi đang thiếu một cái gì đó?Làm cách nào để mô hình thẻ trong cơ sở dữ liệu?

Trả lời

6

Bạn có thấy trước người dùng cần liên kết nhiều thẻ với một đối tượng không?

Nếu không, thêm TAG_ID fk vào bảng OBJECT. Nếu không, bạn sẽ cần ba bảng trong tổng số để mô hình một cách chính xác một nhiều-nhiều mối quan hệ:

OBJECT

  • object_id (pk)

OBJECT_TAG_XREF

  • object_id (pk, fk đến OBJECT)
  • TAG_ID (pk, fk đến TAG)

TAG

  • TAG_ID (pk)
+0

Làm thế nào sẽ thay đổi này để buộc thẻ cho người dùng? OBJECT_ID có trở thành USER_ID không? –

+1

@JuniperAsh: Bạn sẽ phải thêm cột 'user_id' vào' OBJECT_TAG_XREF' - giống như hai cột khác, khóa chính và khóa ngoài cho bảng người dùng. –

+0

Làm cho ý nghĩa hơn nhiều! Cảm ơn bạn! –

4

Có, bạn nên bình thường hóa nó. 'Cột thẻ' sẽ chỉ hỗ trợ một thẻ cho mỗi bản ghi hoặc sẽ có hiệu suất tìm kiếm ghê gớm.

2

Chắc chắn bình thường hóa. Một bảng cho các thẻ, một bảng cho các đối tượng hiện có của bạn và một bảng các liên kết giữa chúng.

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