我目前正在开发一个网络应用程序,该应用程序将显示项目列表。该列表是动态的并且可以在用户之间变化。一个很好的类比是将对象视为书籍,而数据库则将其视为图书馆。
我的图书
数据库将包含图书馆中所有图书的列表。
- 用户可以将一本书添加到他们的 Collection 中。
-如果用户想要将新书添加到他们的 Collection 中,他们也会将其添加到图书馆中。
-如果用户想要将一本新书添加到他们的 Collection 中,并且该书已存在于图书馆中,则不会向图书数据库中添加任何内容。
目前我的表格非常简单:Book(id, name)
。我可以通过 API 调用访问有关这些书籍的大量信息,例如封面、页数等。我想存储这些信息的子集,尤其是图像 url。
我认为一个明智的方法是更改我的 Book 表,使其看起来像: Book(id, name, imageUrl, otherValue, idOfThisBookInApiCallTable)
的 idOfThisBookInApiCallTable
值将允许我在需要时获得其他属性,但是我有两个问题,我不确定如何继续。
首先,这个表很容易与 APITable 过时。我预计不会有太大变化(如果有的话),但风险是存在的。
其次,存储的图像是我主要关心的,在一个可能有 50 本书的页面上,我每次都会调用图像的 url。我认为一个明智的解决方案是在本地下载图像,然后在重复访问时提供该图像,但我不确定这是否是正确的方法。
请问是否有人可以看到这种方法的任何问题和/或建议更好的方法?我在数据库/网络/应用程序设计方面的经验有限,所以有点超出我的深度。
如果在本地保存图像是正确的方法,是否有“最佳”方法? 预先感谢您的任何帮助/建议/忠告。
请您参考如下方法:
我可以分享我的 2 美分合理设计,但我认为这个问题太宽泛,而且主要是基于意见的。让我们一次只做一件事来解决这个问题。
- 首先关于您的
Book
表。为什么不使用Library
表来维护图书馆的当前状态以及图书馆目前拥有的所有书籍。 - 每个用户都可以保存一个集合(具有一对多关系的表等,例如 user_id 到 book_ids 列表等),然后每个用户都拥有 bookID 的子集。
- 通过用户或图书馆添加新书时(即使没有特定用户引入,图书馆也可以添加更多书籍),然后始终将其添加到图书馆,并且 user_id 是这本书的“所有者” ,也在集合表中添加该用户的关系
- 书籍的更多详细信息可以单独存储在
BookDetails
表中。 - 在您这边存储图像始终是一个不错的选择,您不希望在一次又一次请求时因过度使用而被 API 阻止。您可以使用一些云存储,例如 s3,您可以在其中保存图像,而不需要打扰外部 api。 S3 支持压缩和缓存,因此您可以节省大量时间并且不会出现速度问题。
以上所有观点只是我根据您就该问题提供的信息得出的看法。当然,对于您的用例,情况可能会有所不同。