为在网站上注册的每个用户动态创建数据库表可能是一个解决方案吗?

Mik*_*der -1 php mysql codeigniter

只是出于好奇,因为它可以解决我的大多数问题,例如查询多个字段和比较多个表(意大利面纠缠).它有多安全?这是不好的做法还是没关系.如果没关系,在安全方面需要采取哪些预防措施.

问题在于3个表的关系:'用户','朋友'和'帖子'.

用户:

  • ID
  • 名称
  • 电子邮件
  • ...等等

朋友:

  • ID(INT)
  • userid1(INT)
  • userid2(INT)
  • friendship_requested_by(INT)
  • 接受(varchar)
  • 被阻止的(int)
  • blocked_by(INT)
  • befriended_on(日期)

帖子:

  • POST_ID(INT)
  • 用户ID(INT)
  • POST_TEXT(文本);
  • ...等等

我在查询"朋友"TBL时遇到问题,因为有2个字段要比较"user_id1"和"user_id2",然后从"desc"顺序中拉出所有结果.帖子表一直是一个噩梦,或者我必须在mysql中真的生锈.我的快捷方式是,如果我可以为每个用户提供一个表/数据库,那么只有一个只有一个'friend_id'的朋友的表,会更简单我想.

意大利细面条:

  function getPosts($email){
                 $myid = $this->getStudentId($email);
                 $sql = "SELECT DISTINCT user_id1 FROM friends
                        UNION 
                        SELECT DISTINCT user_id2 FROM friends
                       WHERE (user_id1 = ? AND accepted = ? AND blocked = ?)
                           OR (user_id2 = ? AND accepted = ? AND blocked = ?)";

                $query =  $this->db->query($sql,array($myid,'yes','no',$myid,'yes','no'));

                if($query->num_rows() > 0){
                    foreach ($query->result() as $r){

                           //echo "<br>my id1: ".$student_id1;
                         echo "<br> rows : ". $query->num_rows;
                         echo "<br> Amigos : ". $r->user_id1;
                          echo "<br> Amigos : ". $r->user_id2;

                        return $this->getPostByStudentId($r->user_id1,$r->user_id2);


                    }
                }


             }



function getPostByStudentId($student_id1,$student_id2){
             $this->db->where('user_id',$student_id1);
             $this->db->where('user_id',$student_id2);
             $this->db->order_by('post_id','desc');
             $sql = $this->db->get('posts');
             if($sql->num_rows() > 0){

                 return $sql->result();
             }

         }
Run Code Online (Sandbox Code Playgroud)

提前致谢.

小智 5

不是一个好主意.随着数据库的增长,当您需要跨多个表进行搜索时,索引的速度并不快,因此最终会降低性能.

如果您最终需要获取大量用户信息(例如,您想要报告您拥有多少用户以及他们的电子邮件地址是什么),那么突然之间您就会join拥有大量表格(与您一样多的用户)拥有)或进行数百次查询.

最好将所有内容保存在较少的表中,并将数据逻辑地保存在一起,而不是将用户逻辑地保持在一起.

它看起来很诱人,但它的数据库设计很糟糕.

您需要了解数据库规范化. http://en.wikipedia.org/wiki/Database_normalization