在我的数据库中有两个表:“book”和"users“。我在一个页面上显示所有的书,希望用户可以点击一个小链接“我已经读过了”,类似于Facebook的带有状态的like功能。用户可以点击他们已经读过这本书,或者取消点击来“未读”这本书。登录的其他用户也可以看到谁阅读了什么。我正在质疑我的方法,并希望获得其他方向的反馈,以采取类似的事情。
我的想法是在"users“表中有一个字段,可能类似于"books_read",我将在其中存储值的数组(Book_Id)。在显示所有图书的前端,我会查询"books_read“字段,如果一个值与当前的book_id匹配,那么在该图书的下面应该是类似于"User X has this”的内容。
简而言之,我会在“book_id”表中存储一个"users“数组来收集每个用户读过的书。我将拉出此数组,并将ID与查询到的每本书进行比较,如果匹配,则输出用户已阅读该书。
我是不是遗漏了什么,或者可能没有看到一种更干净的方法?
发布于 2011-12-03 09:20:38
在像MySQL这样的关系型数据库管理系统中,将列表存储在一个字段中从来都不是一个好主意,特别是当您知道稍后要在列表中查找特定的部分时。数据库不能通过这样做来利用索引。
相反,您应该创建一个额外的表来链接用户和图书阅读器。您也可以将其命名为*users_books*,并将其读入到它自己的列中。
users_booksread
-----------
user_id
book_id发布于 2011-12-03 09:20:56
创建一个单独的表,可能名为book_read。
在其中,对于用户喜欢的每一本书,存储user_id和book_id。
这样,您就不需要处理凌乱的数组,一切都规范化了,您的设计将更加整洁,您的数据库也将更加灵活。此外,您的用户表上不会有一堆额外的crud,这些crud会以不幸的方式影响性能。
https://stackoverflow.com/questions/8364679
复制相似问题