背景
我正在为诗人和作家开发一个社交网络应用程序,允许他们分享他们的诗歌,收集反馈,并与其他诗人交流.我在数据库设计方面的培训很少,但我一直在阅读书籍,SO和在线数据库设计资源,以确保性能和可扩展性而不会过度设计.
数据库是MySQL,应用程序是用PHP编写的.我不确定我们是否会在应用程序中使用ORM库或从头开始编写SQL查询.除了Web应用程序之外,Solr搜索服务器和某些消息传递客户端将与数据库进行交互.
目前的需求
我在下面拼凑的模式代表了网站第一版的主要组件.最初,用户可以注册该站点并执行以下任何操作:
- 创建和修改配置文件详细信息和帐户设置
- 发布,标记和分类他们的写作
- 阅读,评论和"最喜欢"其他用户的帖子
- "关注"其他用户以获取其活动的通知
- 搜索和浏览内容并获取建议的帖子/用户(尽管我们将使用Solr搜索服务器索引数据库数据并运行这些类型的查询)
架构
以下是我在MySQL Workbench上为初始站点提出的建议.我对某些关系数据库事物仍然有点模糊,所以请轻松一点.

问题
- 一般来说,有什么我做错了或可以改进吗?
- 我有什么理由不将ExternalAccounts表合并到UserProfiles表中吗?
- 我有什么理由不将PostStats表合并到Posts表中吗?
- 我是否应该扩展设计以包含我们在第二个版本中执行的功能,以确保初始架构可以支持它?
- 有什么办法可以优化Solr索引/性能/数据库的DB设计吗?
- 我应该使用更自然的主键,例如Username而不是UserID,还是zip/area代码而不是Locations表中的代理LocationID?
谢谢您的帮助!