【发布时间】:2011-04-20 03:47:21
【问题描述】:
背景
我正在为诗人和作家开发一个社交网络应用程序,让他们可以分享自己的诗歌、收集反馈并与其他诗人交流。我在数据库设计方面几乎没有接受过正规培训,但我一直在阅读书籍、SO 和在线数据库设计资源,以尝试确保性能和可伸缩性而不会过度设计。
数据库是 MySQL,应用程序是用 PHP 编写的。我还不确定我们是使用 ORM 库还是在应用程序中从头开始编写 SQL 查询。除了 Web 应用程序,Solr 搜索服务器和一些消息传递客户端可能会与数据库进行交互。
当前需求
我在下面汇总的架构代表了网站第一个版本的主要组件。最初,用户可以注册该站点并执行以下任何操作:
- 创建和修改个人资料详细信息和帐户设置
- 发布、标记和分类他们的文章
- 阅读、评论和“收藏”其他用户的帖子
- “关注”其他用户以获取他们的活动通知
- 搜索和浏览内容并获取建议的帖子/用户(尽管我们将使用 Solr 搜索服务器来索引数据库数据并运行这些类型的查询)
架构
这是我在 MySQL Workbench 上为初始站点设计的内容。我对一些关系数据库的东西还是有点模糊,所以放轻松。
问题
- 总的来说,有什么我做错了或可以改进的地方吗?
- 有什么理由不应该将 ExternalAccounts 表合并到 UserProfiles 表中?
- 我有什么理由不应该将 PostStats 表合并到 Posts 表中?
- 我是否应该扩展设计以包含我们在第二个版本中所做的功能,以确保初始架构能够支持它?
- 我能做些什么来优化 Solr 索引/性能/其他方面的数据库设计吗?
- 我是否应该在 Locations 表中使用更自然的主键,例如用户名而不是 UserID,或者邮政编码/区号而不是代理 LocationID?
感谢您的帮助!
【问题讨论】:
-
请不要将 SQL 查询放在应用程序的嵌入字符串中。请考虑改用存储过程等。请。
-
哦,抱歉,我会使用存储过程/在查询和应用程序的其余部分之间构建一些基本抽象。
-
可能会为首选类别等添加“UserPreferences”——无论是新表还是在 UserProfiles 中。
标签: mysql database database-design schema social-networking