SQL模式建议

SQL模式建议,sql,sql-server,schema,Sql,Sql Server,Schema,我对SQL相当陌生,尤其是在PHP中使用SQL,我目前正在开发一个允许用户跟踪阅读的应用程序。第一个版本将有一个简单的日历,允许您输入开始的日期和应该在何时结束 我的问题是关于我的用户登录和管理系统。现在,我的SQL数据库设置有三个表——用户、书籍和事件。用户是非常不言自明的,书籍只是书籍和各种信息的集合,然后事件有这样的设置 | UserID | BookID | StartDate | EndDate | | 1 | 2 | 6-10-15

我对SQL相当陌生,尤其是在PHP中使用SQL,我目前正在开发一个允许用户跟踪阅读的应用程序。第一个版本将有一个简单的日历,允许您输入开始的日期和应该在何时结束

我的问题是关于我的用户登录和管理系统。现在,我的SQL数据库设置有三个表——用户、书籍和事件。用户是非常不言自明的,书籍只是书籍和各种信息的集合,然后事件有这样的设置

|  UserID  |  BookID  |  StartDate  |  EndDate  |
|    1     |    2     |   6-10-15   |  6-12-15  |
|    1     |    3     |   6-13-15   |  6-16-15  |
现在我正计划我的应用程序被一小群人使用,但我担心如果我想扩展它,我的SQL数据库可能会限制它我的问题是:如果我最终拥有数千个用户和数百万个“事件”,我当前的模式是否能够处理负载?

我只是担心,当我遇到大量事件时,我将很难快速恢复数据。我考虑为每个用户创建一个新的数据库,并与书籍等共享一个公共数据库,但我不知道如何处理“朋友”之间的信息/消息/书籍共享


即时,包含用户/书籍/事件的单一数据库将完成任务。我只是好奇其他人对进一步分离数据的看法。

SQL Server具有正确配置的数据库模式,可以以相当好的性能处理数千万或数亿行。当然,这取决于你在做什么。。。如果您只是按日期/用户/书籍查找事件,那么这个模式就可以了。您需要正确地索引正确的列,但是数百万行是没有问题的

不过,我怀疑您正在尝试将用户链接到事件,并且每个事件可能有多个用户(每个用户有多个事件)。在这种情况下,您需要一个连接表将用户指向不同的事件

Users
  UserID int

Events
  EventID int
  <dates, or whatever>

EventUsers
  UserID int (Foreign key to Users.UserID)
  EventID int (Foreign key to Events.EventID)
用户
用户ID int
事件
EventID int
事件用户
UserID int(Users.UserID的外键)
EventID int(Events.EventID的外键)

无法回答此问题,您尚未提供有关实际使用的数据库的任何详细信息。模式就是模式。它是否工作完全取决于您在后端使用的数据库类型。“sql”是一个通用的术语。我更多的是寻找数据库结构背后的理论。使用一个包含所有信息的数据库更好,还是跨单独的数据库解析信息更好?它在什么时候转换?我的意思是,如果我只有2个用户,总共只有大约100个事件,那么是的,一个数据库是有意义的。但是一个SQL数据库能有效地返回几千行吗?几百万?如果你查阅规范化规则,一条信息(一种特定类型的信息)应该存储在一个地方,而且只能存储在一个地方,它是一个表中的一列。多用户事件是一种信息类型,应该存储在一列中的特定表中,您需要创建适当的索引以帮助读取。表太大,考虑表分割之类的事情,但是将数据划分成多个表永远都不是个好主意。