Php 探索数据建模(如何将合理的数据库捆绑在一起)

Php 探索数据建模(如何将合理的数据库捆绑在一起),php,mysql,login,server-side,database-table,Php,Mysql,Login,Server Side,Database Table,我正在做一个项目,人们可以创建一个播放列表,并将其作为对象存储在localStorage中。目前一切都是客户端的 所以我现在想向前迈进一步,创建一个用户登录系统(我可以使用php mysql和fb connect或oauth系统,还有其他建议吗?)。问题在于我是否为每个用户创建一个sql数据库并存储他们的播放列表(包含媒体信息),或者是否有其他方法。处理大量数据库对我来说会是个麻烦吗(在速度方面) 不如我只创建一个db,如下所示: 用户数据库-->一个表包含{user(主键)pass someo

我正在做一个项目,人们可以创建一个播放列表,并将其作为对象存储在localStorage中。目前一切都是客户端的

所以我现在想向前迈进一步,创建一个用户登录系统(我可以使用php mysql和fb connect或oauth系统,还有其他建议吗?)。问题在于我是否为每个用户创建一个sql数据库并存储他们的播放列表(包含媒体信息),或者是否有其他方法。处理大量数据库对我来说会是个麻烦吗(在速度方面)

不如我只创建一个db,如下所示:

用户数据库-->一个表包含{user(主键)pass someotherInfo},然后每个用户的表{包含播放列表),每个播放列表的第三个表(包含用户ID和媒体信息,我的主键可以是什么?)

例如: 我有10个注册用户,每个用户有2个播放列表

1.table 1: 10 entries
2.table(s): username - playlists (10 tables) || i make one table with one field user other field playlist name
3.tables: each playlist - media info, owner (20 tables)
还是有更简单的方法

我希望我的问题是清楚的


PS:我不熟悉php和数据库(所以这可能很傻)

你可以使用像MYSQL或Postgresql这样的SQL数据库,也可以使用像MongoDB这样的NOSQL数据库。每种数据库都有其优缺点,但既然你看起来像个初学者,我建议你使用MYSQL,因为大多数初学者都会使用它。看看这些文章

http://www.redhat.com/magazine/007may05/features/mysql/


当然,你可以在大G上自由搜索,因为那里有大量的资源。

令人惊讶的是,大多数答案似乎都漏掉了这个问题,但我会尝试一下

这称为数据建模(如何将数据库中的一组表组合在一起,以便以最佳方式表达您的需求),不要傻到发问;有些人会把所有醒着的时间都花在调整和设计数据模型上。它们对任何系统的健康都非常重要,事实上,它们比大多数人认为的重要得多

听起来你走的路是对的。定义你的实体并为每个实体创建一个表总是一个很好的建议,因此在这种情况下,你有用户、播放列表和歌曲(例如)。这样定义你的表:用户、歌曲、播放列表

下一件事是定义字段和表的名称(也许上面建议的简单名称是简单的)。一些人引入了假名称空间(即MYAPP_用户而不是仅仅用户),特别是如果他们知道数据模型将来将在同一数据库中扩展和扩展(或者,有些人因为知道这是不可避免的),而其他人只需要快速完成他们所需要的

最大的问题总是围绕着这个问题和各种各样的问题,平衡性能和适用性,关于这个主题的书很多很多,所以我没有办法给你任何有意义的答案,但对我来说,它的要点是

在什么情况下,表中的数据字段才适合自己的表?一个例子是,根据您希望分割数据的方式,您可以使用一个表、两个表或6个表来创建应用程序。这就是我认为您真正需要回答的问题

我想说,您的假设非常正确,需要记住的是一致的命名约定(关于如何命名标识符有很多意见)

USER { id, username, password, name, coffee_preference } 
SONG { id, artist, album, title, genre } 
PLAYLIST { id, userid } 
PLAYLIST_ITEM { id, songid, playlistid, songorder }
现在您可以使用SQL为用户获取所有播放列表

   SELECT * FROM PLAYLIST WHERE userid=$userid
或者在播放列表中获取所有歌曲

   SELECT * FROM SONG,PLAYLIST_ITEM WHERE playlist_item.playlistid=$playlist.id AND song.id=playlist_item.songid ORDER BY playlist_item.songorder

诸如此类。同样,关于这个主题已经有很多书了。这些书都是关于在草草记下技术解决方案的同时清晰地、语义化地思考。有些人只是把它作为一种职业(比如DBA)。将会有很多意见,特别是关于我在这里写的内容。祝你好运。

我添加了一些好的链接,让你开始学习,请参见下面我的答案。问题不是选择正确的sql系统。(我有xampp,所以是mysql),这是关于选择db表的结构和组合的。感谢您的快速提示。在使用PostgreSQL时提到“缺点”时,渴望得到-1。您能在这方面展开哪怕是最细微的一点吗?我不是指每次选择的缺点,而是指整个伞形MYSQL与NOSQL。