我想创建一个类似于basecamp或mailchimp的应用程序。客户自行注册,然后自动为其设置应用程序。应用程序将使用cakephp开发。
我的问题是什么是最好的数据库结构?
在一个表中用客户ID分隔的所有客户。
每个拥有自己的数据库+数据库用户的客户。
在他的文件夹中为每个人使用一个sqlite文件。

最佳答案

实现可以有不同的方法,每种方法都取决于应用程序的性质,例如为每个用户提供了什么功能、涉及到的每用户数据以及这些数据所包含的关系、涉及到的每用户数据的数量等。
方法1:单个应用程序数据库;根据应用程序的功能/结构,多个表,但这些表为所有用户保存数据。例如,commentspermissionscategories等。
优点:结构简单,检索和插入方便快捷
缺点:如果表太大或涉及复杂索引,数据库操作可能会变得昂贵。
方法2:单个应用程序数据库;根据应用程序的功能/结构,多个表;每个用户都有自己的表集,可能由用户标识。例如,对于用户标识=1,表可能是comments_1permissions_1categories_1等。
优点:同样简单的体系结构;易于识别要为特定用户查询哪些表;由于表只包含特定用户的数据,因此至少少了一个WHERE子句(其中user_id=xx);较小的表,因此检索速度更快;锁冲突发生的可能性更小。响铃繁忙时间
缺点:需要更多的维护;添加需要添加新列或表的更新功能,将需要对所有用户表集进行架构更改;
方法3:每个用户多个应用程序数据库
优点:100%隔离用户之间的数据;易于调整的数据库模式应为每个用户定制功能;易于跨多个服务器拆分数据库以实现负载平衡;
缺点:复杂的体系结构;需要更多的维护;存储公共或共享数据更为棘手-数据可以复制到每个用户数据库,也可以维护公共数据库。
我认为,如果模式的有效设计能够在更快的选择/插入和每个表的数据量之间保持平衡,那么第一种方法对于100-10000个用户应该很好地工作。但是,它需要大量的数据库调整和智能索引。
从方法2和3来看,这两种方法都可以很好地工作,但从我的角度来看,方法3更好,因为它给了您更多的灵活性。实现可能需要一些时间,但并不难
而且,sqlite似乎不适合这样的实现。我建议使用关系数据库,比如mysql。
希望上面提供了一些对实现的深入了解,并帮助一些人决定什么最适合您的应用程序。

07-24 09:50
查看更多