自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

MySQL以用戶為本 構(gòu)建SNS網(wǎng)站的核心數(shù)據(jù)庫(kù)

數(shù)據(jù)庫(kù) MySQL 數(shù)據(jù)庫(kù)運(yùn)維
本文將為大家介紹的是如何用MySQL構(gòu)建以用戶為核心的SNS網(wǎng)站,包括具體的數(shù)據(jù)庫(kù)設(shè)計(jì)以及對(duì)于cache的相關(guān)處理。

1 前言

最近項(xiàng)目開發(fā)過程中,遇到數(shù)據(jù)庫(kù)設(shè)計(jì)方面的問題,參考了多個(gè)數(shù)據(jù)庫(kù),總結(jié)了一些相關(guān)的數(shù)據(jù)庫(kù)實(shí)體及關(guān)系的表示 3月份的時(shí)候也寫過一篇MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)復(fù)習(xí)筆記及項(xiàng)目實(shí)戰(zhàn) ,現(xiàn)在再次進(jìn)行總結(jié),并添加了在項(xiàng)目中的數(shù)據(jù)庫(kù)設(shè)計(jì)及具體的持久化及cache實(shí)現(xiàn).

數(shù)據(jù)庫(kù)作為底層,命名規(guī)范和變動(dòng)都會(huì)直接影響到上層,所以在設(shè)計(jì)上更需要謹(jǐn)慎.

本文從 數(shù)據(jù)庫(kù)實(shí)體及關(guān)系處理,數(shù)據(jù)持久化及緩存處理,這3個(gè)方面來進(jìn)行闡述

先看下本次 我是買家 開源項(xiàng)目設(shè)計(jì)軟件 采用的是 MySQL Workbench

點(diǎn)擊查看詳細(xì)大圖

2 實(shí)體及關(guān)聯(lián)處理

篩選實(shí)體,從圖中我們可以看到,圖中主要分成了6個(gè)部分

實(shí)體表

goods 商品

communicate 群

say  我說

comment 評(píng)論

url  站點(diǎn)

brand 品牌

compaign 活動(dòng)

用戶表user

關(guān)系表

userandmodel  用戶模型關(guān)系

modelandmodel 模型模型關(guān)系 aactionandmodel 頁(yè)面實(shí)體關(guān)系

tags  TAG實(shí)體關(guān)系

資源表

image 圖片

album 相冊(cè)

群組表

group 小組

topic  話題

post   回復(fù)

userandgroup  用戶群組關(guān)聯(lián)

 

 

站點(diǎn)常用表

systemtree 系統(tǒng)樹

content 內(nèi)容

ad 廣告

report 舉報(bào)

district 地區(qū)

log 日志

services 客服人員

mail 站內(nèi)信

 

以用戶為中心,user表放在中間,關(guān)聯(lián)其他的實(shí)體

實(shí)體表 可以進(jìn)行擴(kuò)展 添加相關(guān)的應(yīng)用實(shí)體

關(guān)系表  主要包含4個(gè)表

用戶和模型關(guān)聯(lián)表 比如: 張三 喜歡 IPOD   李四 想買 IPOD linktype="like/buy"  

模型模型關(guān)聯(lián)表  比如商品評(píng)論關(guān)聯(lián) modela 商品 modelb 評(píng)論  

actionandmodel 頁(yè)面模型關(guān)聯(lián)表  tag關(guān)鍵字及實(shí)體關(guān)聯(lián)表

資源表  主要包含了 image ablum  image表包含了系統(tǒng)實(shí)體類關(guān)聯(lián)的圖片

群組表  包含了group,topic,post userandgroup ,群組作為系統(tǒng)獨(dú)立模塊獨(dú)立出來

常用表  常有表從實(shí)體表中分離出來,放站點(diǎn)需要的表

#p#

3 數(shù)據(jù)持久化及緩存處理

數(shù)據(jù)持久化

THINKPHP處理數(shù)據(jù)機(jī)制簡(jiǎn)單的說,直接實(shí)例化model類得到model示例即可進(jìn)行數(shù)據(jù)庫(kù)語(yǔ)句的相關(guān)操作,如下圖所示

數(shù)據(jù)持久化

 點(diǎn)擊這里查看大圖

DbMysql 繼承自Db,  AdvModel,ViewModel,RelationModel繼承自Model類,Model類調(diào)用DB類進(jìn)行具體的數(shù)據(jù)庫(kù)操作

比如查詢所有用戶操作

  1. $user = newModel('User');    
  2. $result =$user->select();    
  3. var_dump($result);//輸出所有的用戶  

比如添加用戶操作

  1. //接收POST過來的表單數(shù)據(jù),創(chuàng)建數(shù)據(jù)    
  2. if($user->create())    
  3. {    
  4.   if($user->add())    
  5.    {    
  6.      echo '添加成功';    
  7.  
  8.     }    
  9. }  

對(duì)于數(shù)據(jù)單表操作,使用ThinkPHP框架的Model進(jìn)行處理相對(duì)比較簡(jiǎn)單.對(duì)于關(guān)聯(lián)查詢,可以使用TP的RelationModel 也可以自己在自定義模型中定義,比如查詢用戶及頭像信息,這里自定義了Model UserModel.class.php

  1. <?php    
  2. //+----------------------------------------------------------------------    
  3. // | WoShiMaiJia Projcet    
  4. // +----------------------------------------------------------------------    
  5. // | Copyright (c) 2010 http://woshimaijia.com All rights reserved.    
  6. //+----------------------------------------------------------------------    
  7. // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )    
  8. //+----------------------------------------------------------------------    
  9. // | Author: xinqiyang <517577550@qq.com>    
  10. //+----------------------------------------------------------------------    
  11. /**    
  12.  * 用戶模型文件    
  13.  * @author xinqiyang    
  14.  * @date   2010-4-9    
  15.  *    
  16.  */   
  17. class UserModel extends MetaModel {    
  18.    // 自動(dòng)驗(yàn)證設(shè)置    
  19.    protected $_validate     =     array(    
  20.    array('email','email','郵箱沒填或格式不正確',1,'',1),    
  21.    array('email','','郵箱已被使用',1,'unique',1),    
  22.    array('password','require','密碼必須輸入',0,'',1),    
  23.    array('enname','charecter','英文名只能由數(shù)字,字母,下劃線組成',1,'',1),    
  24.    array('enname','','名稱已被使用',1,'unique',1),    
  25.    array ('birthday','date','生日必須輸入格式如 1980-01-01',2,'',2),    
  26.    array ('qq','qq','QQ號(hào)不能為空或者 位數(shù)不正確',2,'',2),    
  27.    array ('mobile','mobile','手機(jī)不能為空,或格式不正確',2,'',2),    
  28.    );    
  29.    // 自動(dòng)填充設(shè)置    
  30.    protected $_auto     =     array(    
  31.    array('image_id','1'),//設(shè)置默認(rèn)頭像,使得評(píng)論可以成功    
  32.    array('password','md5',1,'function'),    
  33.    array('createtime','time',1,'function'),    
  34.    array('registerip','get_client_ip',1,'function'),    
  35.    array ('lastloginip','get_client_ip',2,'function'),    
  36.    array ('lastlogintime','time',2,'function'),    
  37.    );    
  38.    /**    
  39.     * 返回用戶信息    
  40.     * @param $arr    
  41.     */   
  42.    function getUsers($arr)    
  43.    {    
  44.      return $this->query("selectsz_user.id,sz_user.cnname,sz_user.city,
  45. sz_user.gogonum,sz_user.shownum,sz_image.filename,sz_image.url,sz_image.model  
  1. from sz_user,sz_image    
  2. view sourceprint?   
  3. where sz_image.id = sz_user.image_id and sz_user.id in".$arr);    
  4.    }    
  5.    function getUserTotal()    
  6.    {    
  7.      $total =$this->query("    
  8.      select count(*) fromsz_user;    
  9.      ");    
  10.      return $total[0]['count(*)'];    
  11.    }    
  12. }    
  13. ?>  

這里的返回用戶信息,執(zhí)行了一條SQL查詢,對(duì)多表進(jìn)行關(guān)聯(lián)查詢,返回用戶的信息數(shù)據(jù)集,操作也比較方便

調(diào)用如下

  1. $u = newModel('user');    
  2. $lst =$u->getUsers($ids); //帶入需要調(diào)用的ID  

本類沒有使用到緩存,以下以Memcache緩存的使用為例來講解項(xiàng)目中的應(yīng)用

先看下cache的類圖

cache類圖

具體cache實(shí)現(xiàn)類繼承自cache類

使用如下

自定義model類  DistrictModel 繼承自 MetaModel , MetaModel繼承自Model , 在MetaModel類中實(shí)現(xiàn)緩存調(diào)用

  1. <?php    
  2. //+----------------------------------------------------------------------    
  3. // | WoShiMaiJia Projcet    
  4. // +----------------------------------------------------------------------    
  5. // | Copyright (c) 2010 http://woshimaijia.com All rights reserved.    
  6. //+----------------------------------------------------------------------    
  7. // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )    
  8. //+----------------------------------------------------------------------    
  9. // | Author: xinqiyang <517577550@qq.com>    
  10. //+----------------------------------------------------------------------    
  11. /**    
  12.  * 元數(shù)據(jù)基類    
  13.  * 提供了緩存操作功能及基本的CRUD操作功能    
  14.  * @author xinqiyang    
  15.  *    
  16.  */   
  17. class MetaModel extends Model    
  18. {    
  19.    //緩存實(shí)例    
  20.    protected $cache;    
  21.    /**    
  22.     * 返回一個(gè)緩存操作實(shí)例    
  23.     */   
  24.    function _initialize()    
  25.    {    
  26.      //如果未設(shè)置則設(shè)置緩存實(shí)例    
  27.      if(!isset($this->cache))    
  28.      {    
  29.         $this->cache= Cache::getInstance('Memcache');    
  30.      }    
  31.    }    
  32.    /**    
  33.     * 刪除緩存    
  34.     * @param$cachename 緩存名稱    
  35.     */   
  36.    protected function rm($cachename)    
  37.    {    
  38.      $this->cache->rm($cachename);    
  39.    }    
  40. }    
  41. ?>  

這里以城市表信息的memcache緩存為例來實(shí)現(xiàn)緩存的獲取及調(diào)用

  1. <?php    
  2. class DistrictModel extends MetaModel    
  3. {    
  4.    /**    
  5.     * 獲取省市區(qū)    
  6.     * TODO:現(xiàn)在先用文件緩存,部署memcache后用 內(nèi)存緩存就好了    
  7.     */   
  8.    public function getDistrict()    
  9.    {    
  10.      //獲得數(shù)據(jù)    
  11.      if(!$this->cache->get('district'))    
  12.      {    
  13.          //寫入cache,5000多條的時(shí)候就掛掉了,數(shù)據(jù)不能超過1M    
  14. $this->cache->set('district',$this->where('level=2 or id in (1,2,9,22)')- >select(),0,-1);    
  15.      }    
  16.      return $this->cache->get('district');    
  17.     }    
  18. }    
  19. ?>  

調(diào)用過程,在調(diào)用過程中,先創(chuàng)建cache實(shí)例,在進(jìn)行調(diào)用,緩存數(shù)據(jù),如果緩存數(shù)據(jù)則直接讀取數(shù)據(jù)

4 結(jié)語(yǔ)

本文主要是從大家設(shè)計(jì)過程中常見的問題進(jìn)行討論,對(duì)于數(shù)據(jù)庫(kù)設(shè)計(jì)方面還存在很多的不足,大家是否在項(xiàng)目中也是自己設(shè)計(jì)的呢?

原文標(biāo)題:以用戶為中心的SNS站點(diǎn)數(shù)據(jù)庫(kù)設(shè)計(jì)及實(shí)現(xiàn)

鏈接:http://www.cnblogs.com/scotoma/archive/2010/08/08/1794964.html

【編輯推薦】

  1. SNS網(wǎng)站數(shù)據(jù)庫(kù)技術(shù)分析
  2. MySQL 修改密碼的6個(gè)好用方案
  3. MySQL數(shù)據(jù)庫(kù)訪問妙招在Linux之下
  4. 從MySQL數(shù)據(jù)庫(kù)表中來檢索數(shù)據(jù)并不難
  5. 圖解MySQL數(shù)據(jù)庫(kù)安裝與實(shí)際操作

 

責(zé)任編輯:彭凡 來源: 博客園
相關(guān)推薦

2010-07-23 13:39:19

SNS網(wǎng)站

2012-12-04 17:50:23

2010-08-13 09:58:15

Gooele

2015-09-09 14:18:54

高端存儲(chǔ)稅務(wù)信息化構(gòu)建華為

2022-06-20 09:17:02

數(shù)據(jù)查詢請(qǐng)求數(shù)據(jù)庫(kù)

2012-04-29 10:56:34

APP

2014-11-14 11:06:17

醫(yī)療華為

2021-03-24 14:13:51

數(shù)據(jù)分析架構(gòu)大數(shù)據(jù)

2011-08-04 09:57:03

dbmonsterMySQL

2011-05-11 17:24:27

浪潮八路遵義銀行

2016-06-27 14:01:15

存儲(chǔ)初志科技

2015-10-23 17:05:07

響巢看看創(chuàng)星空間

2021-12-13 22:59:23

MySQL數(shù)據(jù)庫(kù)SQL

2012-08-10 09:44:06

2010-04-23 17:55:25

Oracle數(shù)據(jù)庫(kù)

2015-11-02 15:46:26

云夢(mèng)

2017-05-04 11:01:16

諸葛io數(shù)據(jù)分析

2018-03-08 18:00:21

數(shù)據(jù)庫(kù)MySQL數(shù)據(jù)庫(kù)軍規(guī)

2020-09-14 13:59:24

數(shù)據(jù)

2023-11-13 16:58:40

數(shù)據(jù)庫(kù)系統(tǒng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)