mysql最佳实践,用于集中来自具有不同表设计的多个表的数据

时间:2014-12-07 08:26:19

标签: mysql database-design relational-database

我的数据库包含大约20个包含用户信息的表。例如它有

  1. 个人:持有用户个人信息
  2. 文件:上传的文件
  3. 活动:
  4. 等。
  5. 每个表都包含一个user_Id列,用于将它们连接在一起(一对多关系),以及不同的表特定列和约束。

    我的问题是如何从所有这些表中获取单个用户的所有数据?

    目前,当我加载用户时,应用程序需要执行

    Select * from table1 where user_Id = x;
    Select * from table2 where user_Id = x;
    Select * from table3 where user_Id = x;
    ..etc
    

    因为我使用php(oop)并不是坏事,因为每个表都有自己的模型来检索它。然而,我担心性能,因为我每次加载页面时目前运行超过20个查询。由于这些数据非常动态更新。缓存没有多大帮助。

    那么解决这个问题的最佳方法是什么?

    表结构的例子

    CREATE TABLE IF NOT EXISTS `documents` (
      `id` int(10) unsigned NOT NULL,
      `user_id` int(10) unsigned NOT NULL,
      `collection` text NOT NULL,
      `photo_date` timestamp NULL DEFAULT NULL,
      `gallery` varchar(50) NOT NULL,
      `cover` int(1) DEFAULT NULL,
      `upload_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;
    
    CREATE TABLE IF NOT EXISTS `problemlist` (
      `id` int(10) unsigned NOT NULL,
      `user_id` int(10) unsigned NOT NULL,
      `visit_id` int(10) unsigned NOT NULL,
      `pt_id` int(10) unsigned NOT NULL,
      `problem` varchar(200) NOT NULL,
      `severity` int(2) unsigned NOT NULL,
      `note` text,
      `solved` int(1) unsigned NOT NULL,
      `datetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;
    CREATE TABLE IF NOT EXISTS `visits` (
      `id` int(10) unsigned NOT NULL,
      `pt_id` int(10) unsigned NOT NULL,
      `user_id` int(10) unsigned NOT NULL,
      `visit_date` timestamp NULL DEFAULT NULL,
      `visit_end` timestamp NULL DEFAULT NULL,
      `complain` varchar(250) DEFAULT NULL,
      `dx` varchar(200) DEFAULT NULL,
      `note` text,
      `stats` enum('booked','waitting','finished','noshow','canceled','inroom') NOT NULL,
      `deleted` int(1) DEFAULT NULL,
      `booked_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
      `arrived_at` timestamp NULL DEFAULT NULL,
      `started_at` timestamp NULL DEFAULT NULL,
      `checkout_at` timestamp NULL DEFAULT NULL,
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=212 ;
    

0 个答案:

没有答案