Php 使用MySQL高效存储数据

Php 使用MySQL高效存储数据,php,mysql,performance,Php,Mysql,Performance,我正在为我的音乐协会制作一个网站,一些PDF应该对用户可见。现在,大约有200个用户,分为10个组,其中一个用户可以分为多个组,还有30个仪器。对于所有音乐作品,数据库应该知道哪个组中的哪个音乐作品属于哪个用户和乐器 例如,当我使用用户名Jeroen登录时,数据库应该知道,对于组Group1中的MusicalPiece1,我需要带有Part1的Instrument1的pdf 请注意,在不同的乐曲上,我可能会演奏其他乐器,因此乐器1和Part1可以更改。还请注意,在第1组中,我可能会为音乐片段1弹

我正在为我的音乐协会制作一个网站,一些PDF应该对用户可见。现在,大约有200个用户,分为10个组,其中一个用户可以分为多个组,还有30个仪器。对于所有音乐作品,数据库应该知道哪个组中的哪个音乐作品属于哪个用户和乐器

例如,当我使用用户名Jeroen登录时,数据库应该知道,对于组Group1中的MusicalPiece1,我需要带有Part1的Instrument1的pdf

请注意,在不同的乐曲上,我可能会演奏其他乐器,因此乐器1和Part1可以更改。还请注意,在第1组中,我可能会为音乐片段1弹奏乐器1部分,但在第2组中,我可能会为同一音乐片段1弹奏乐器2部分。最后,应该可以更改数据。不太难,但如果使用复杂的数据存储,可能会非常困难

因此,我需要一种有效的方法通过PHP将这些数据存储在MySQL数据库中,因为我不想在脚本计算出我应该得到的PDF之前等待几分钟

编辑:脚本的输入值是:

Username
Group
Musical piece
现在,输出结果应该是:

Instrument
Part

这意味着每种组合都会产生一个特定的仪器和零件。

这是一个数据库设计问题。以下是您的实体表和一些列:

成员名称 组名 作品名称 仪器名称 由于一个成员可以属于多个组,您还需要另一个表,它在这两个表之间形成一个多:多

团体成员 此外,乐器似乎是由作品与你的团队的交集决定的。因此,GroupMember表决定了您的工具:

组成员id\u成员,id\u组,id\u件,id\u仪器,id\u零件 因此,对于一件作品,您可以列出一些确定乐器的组成员。这允许你规定作为一个以上团体的成员允许你在每个团体演奏不同的乐器。还请注意,乐器设置在GroupMember中,允许该组的不同成员弹奏不同的乐器

最后,我认为GroupMember的主键为id_member、id_group、id_piece,防止每个成员加入一个组超过一次,无论他们使用的是相同的还是不同的工具,也不管他们在哪个部分

现在,您应该发现,如果这些关系正确地模拟了您的场景,那么您可以使用SQL从数据中发现任何您想要的东西

附录,来自注释:有时这些关系问题是语义问题。例如,如果我们说一个成员不能在一组中每件乐器演奏一次以上,那么我们如何处理希望在一组中使用两种乐器合法演奏同一件乐器的成员?解决方法可能是将它们分成两组,每组都有相同的片段。这似乎与你问题的第三段相符。当然,这取决于团队在现实场景中的实际含义


我想补充一点,你对表现的担忧是错误的。您可以将包含40K行的数据库调整为非常快的事情,通常只需添加正确的索引。然而,您优化得太早了:首先让它工作起来,然后再研究性能问题。在我看来,您的做法是正确的。

您尝试了什么?我尝试制作一个包含“用户”、“组”、“标题”、“工具”和“部分”列的大表格。但这一点都不高效,对于一首音乐作品来说,大概有60000行……您需要规范化数据,并将自然实体分离到单独的表中。对于1对多和1对1,使用外键链接这些表;对于多对多,使用带有外键的中间链接表链接这两个实体。一定要研究索引。没有理由不能像这样存储数百万行并且响应时间不到一秒。我已经回滚了您的编辑并重新应用了您的更改,请参阅-您重写了我的问题改进。我经常看到这种情况,不知道它是怎么发生的;一般来说,在进行编辑之前刷新浏览器窗格可能是值得的。定位部件呢?每一件每一组每一个成员都不一样好的一点,我错过了。重新阅读描述,我猜这又是由GroupMember级别决定的。因此,这将是GroupMember表中的另一个表部分和外键部分_id@用户1938314,听起来对吗?你觉得怎么样,埃比罗布?你可以把乐器和角色看作一个组合体。一般来说,这种想法是用户、grop和piece的组合产生了乐器和零件。我会在原来的问题上加上这个,谢谢。好吧,我想我的大部分都是这样做的,只是减去部分。如果你有一个成员,分组双工,然后你可以得到仪器和所有成员的作品
小组游戏。因此,如果您指定元组成员、组、块,那么您可以关注一个表,该表链接到您的PDF。澄清:成员是否可能在一个组中出现多次?i、 e.它们是否可以在同一组中针对两个不同的片段出现一次?不确定我是否正确理解您的说明,但用户可以在一个组中播放多个片段,是的。也许你的意思是,一个用户可能为同一个组合弹奏多个乐器。你能解释一下你在做什么表格,它们有哪些列吗?我真的不明白你是怎么做到的。