【发布时间】:2013-11-29 19:01:24
【问题描述】:
我正在为我的网站设计一个用于论坛功能的数据库。在 SO 和 google 上进行了一些搜索之后,我想出了以下设计: 用户表
Username : varchar(256)
Password : varchar(256)
线程表
ThreadId : int
UserId : int, related to Users table
Title : varchar(255)
Date : timestamp, when a thread was created
帖子表
PostId : int
ThreadId : int, related to Threads table
UserId : int, related to Users table
Date : timestamp, when post was made
Title : varchar(255) - post title (optional)
Body : text - the actual body of a post
尽管这符合我的目的,但我不禁认为这不是很有效,特别是对于需要遍历整个表的特定线程选择所有帖子时。
从我的脑海中,我可以想到一个设计,其中 Users 表 和 Threads 表 保持原样,而不是只有一个表Posts 表,我为每个与用户同名的用户创建一个 Posts 表。这样检索属于一个线程的所有帖子效率更高,因为我只需要启动线程的人的用户 ID。使用此信息,我搜索具有相同名称的表以检索特定线程的所有帖子。但是直接创建表的数量是否是个好主意取决于注册用户的数量?我还想知道的是,这些设计中的哪一种会更好地扩展,更容易管理?有更好的数据库设计来满足我的要求吗?
【问题讨论】:
-
签出:net.tutsplus.com/tutorials/php/… 虽然显然使用 PDO 或 mysqli 代替
标签: php mysql database optimization