【问题标题】:Which of these two approaches is better for organizing and querying data from a mysql?这两种方法中哪一种更适合从 mysql 组织和查询数据?
【发布时间】:2012-11-11 21:35:09
【问题描述】:

我正在尝试决定如何实现这一点,希望您的经验可以帮助我。

问题

用户使用 facebook api 登录到 webapp,这给了我一堆数据、姓名、facebook id(我使用该数字来识别我网站中的用户)、年龄和我需要的其他一些随机数据存储以供以后分析。之后,用户可以索要一张票(只是一段带有在 php 脚本中生成的数字的文本),当票生成时,我存储了用户 facebook id、日期(MM/DD/YYYY),当然还有一个票的唯一ID,同一用户可以要求多张票。

解决方案 1(有条理,但对 mysql 服务器似乎有压力)

有两张表,一张名为users,我在其中存储从 facebook api 检索到的所有用户个人信息,包括 facebook 用户 ID。第二个表名为Tickets,其中仅存储票证的创建日期和创建票证的用户的 facebook 用户 ID,当然此表有一个自动递增的唯一 ID 来标识它自己的票证。

将来,我需要显示创建票证的所有用户的列表,不仅显示他们的 facebook 用户 ID,还显示他们的个人信息,所以这意味着我需要查询 tickets 和每一行/ticket 我使用 facebook id 找到我需要查询 users 以检索该用户的个人信息(姓名,年龄,...)。因此,如果我有 10000 个由 10000 个唯一用户创建的票证,我将需要查询我的 Mysql 服务器 10001,一个用于检索一组票证,10000 个用于检索每个用户的信息...

解决方案 2(不是我喜欢的那样组织)

而不是有两个表,只有一个,我存储所有内容、票证和用户数据,因此当用户创建票证时,我不仅将与票证相关的信息存储在同一张表中,还存储用户个人数据,稍后,如果我想显示创建票证的用户列表,我只需对tickets 进行一次查询,最终将检索(如果我有 10000 张票证)一大包数据,我稍后将使用 php 解析.这样我的查询更少但数据更大。


现在我已经运行了第一个解决方案的基本实现,但现在我有点担心可伸缩性问题。

这是我的users 表的一部分的外观:

这是tickets 表:

因此,为了列出用户,我会这样进行;来自ticketsdiscount_id 代表一种票,所以如果需要类型1 我查询*票WHERE discount_id=1,从数组中它给我使用winner_id(这是Facebook 用户ID票的创建者)我将它从users 压缩到face_id 以检索个人信息。

我正在考虑用第三种方法来解决这个问题,即结合 1 和 2,拥有相同的两个表,在我查询 tickets 以获取我需要的类型之后,然后我查询(只有一个)表 @ 987654338@ 要求提供所有用户 ID tickets 给我的数组,但我不知道如何执行此操作以及是否值得。


哪种解决方案更好?有没有聪明的方法可以继续?谢谢!

【问题讨论】:

  • 了解SQL joins 并使用您的第一个解决方案。在users.face_idtickets.winner_id 上的索引应该非常高效。
  • tl;dr; 使用正确的规范化模式。你会感谢以后“强制”这样做的每个人。
  • 是的,绝对是第一个解决方案。

标签: php mysql


【解决方案1】:

如果可以的话,就像注释的 definitley 一样分解表结构。它使生活更轻松,因此使用第一个版本。很多事情只有通过很多表才能实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    • 2018-06-27
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多