【问题标题】:Need help on designing database [duplicate]在设计数据库方面需要帮助[重复]
【发布时间】:2014-08-02 22:46:01
【问题描述】:

我是网络开发的新手,我正在尝试通过做项目来学习网络开发。

我决定建立一个网站,你可以搜索一本书的名字,结果将是用户阅读这本书的列表。

我知道这没什么用,只是想学习

我的问题是我不知道如何在数据库中存储用户阅读的书籍列表。

我只是自己找到了这两种方法来制作可以为我做这件事的数据库,但我确信这不是最快的方法。

1-我可以将它们全部存储在一个带有读者 ID 的表中,很快它们就会变得太多行并让我的网站变慢

2-我可以为每个用户创建一个表,然后在所有表中搜索一本特定的书,然后我可以返回包含该书的表所有者的名称,我认为搜索我的数据库的整个表非常慢也是。

我将非常感谢任何能回答我问题的人。 我真的被困在我的网站的这一点上 ;)

【问题讨论】:

  • 'too many rows' 对于一个数据库来说很多,比你想象的要高很多。每个用户的表是not a good idea
  • 我知道我的网站只是为了学习,用户并不多,但想想 100 万用户有 100 本书,搜索会变得太多,不会吧?
  • 当然。拥有 100 万用户时,您将开始无处不在遇到性能问题,但到那时您将拥有更多资源来解决这些问题。在您的示例中,将有 1,000,000 多个表的性能很多
  • 听起来像是多对多关系的情况。如果你不知道那是什么或者我为什么这么说,我听说过这本书的好东西,数据库设计为凡人。

标签: mysql sql database database-design


【解决方案1】:

怎么样

users table
-----------
id
name
other_stuff


books table
-----------
id
title
author
isbn_number
release_date
other_stuff


lendings table
--------------
book_id
user_id
lended_from
lended_to

使用此设计,您可以查看当前谁拥有特定的书

select u.name
from users u
join lendings l on l.user_id = u.id
join books b on l.book_id = l.book_id
where b.title = 'moby dick'
and now() >= lended_from 
and lended_to is null

【讨论】:

  • 我的第一个想法就像您的回答一样,但我不确定这是否是存储数百万用户阅读的书籍的最佳方式,如果每个人阅读 100 本书,它会变得太多书它不会t?
  • 不,数据库可以轻松保存数十亿条记录。通过适当的索引,这是非常快的。
  • +1 @hamidreza eyvanaki:这是多对多关系的规范模式。您可能有很多行,但关系数据库旨在处理大量行。为了提高性能,关系数据库有效地使用了适当定义的索引。也就是说,数据库不一定需要检查数据库中的每一行来找到它要查找的行。使用索引,数据库可以有效地缩小满足查询所需的特定行。
猜你喜欢
  • 2011-07-17
  • 2011-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
相关资源
最近更新 更多