Home | 簡體中文 | 繁體中文 | 雜文 | 知乎專欄 | Github | OSChina 博客 | 雲社區 | 雲棲社區 | Facebook | Linkedin | 視頻教程 | 打賞(Donations) | About
知乎專欄多維度架構 微信號 netkiller-ebook | QQ群:128659835 請註明“讀者”

第 22 章 參考例子

目錄

22.1. CMS 資料庫設計
22.2. 數據屬性例子
22.2.1. 布爾狀態
22.2.2. 流狀態
22.2.3. 商品屬性
22.2.3.1. 鞋
22.2.3.2. 褲子
22.2.3.3. 服裝
22.2.3.4. 內衣
22.2.3.5. 隱形眼鏡
22.2.3.6. 戒指
22.2.4. 手機號碼分配
22.2.5. 身份證
22.2.6. 銀行卡

22.1. CMS 資料庫設計

		
-- --------------------------------------------------------
-- 主機:                           192.168.6.1
-- 伺服器版本:                        5.6.26-log - MySQL Community Server (GPL)
-- 伺服器操作系統:                      Linux
-- HeidiSQL 版本:                  9.3.0.4998
-- --------------------------------------------------------

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET NAMES utf8mb4 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;

-- 導出 inf 的資料庫結構
CREATE DATABASE IF NOT EXISTS `inf` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `inf`;


-- 導出  表 inf.album 結構
CREATE TABLE IF NOT EXISTS `album` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `folder` varchar(8) NOT NULL,
  `description` varchar(255) NOT NULL,
  `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `mtime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `folder` (`folder`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 數據導出被取消選擇。


-- 導出  表 inf.article 結構
CREATE TABLE IF NOT EXISTS `article` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '唯一值',
  `division_id` mediumint(8) unsigned NOT NULL COMMENT '所屬事業部',
  `category_id` mediumint(8) unsigned DEFAULT NULL COMMENT '分類',
  `division_category_id` mediumint(8) unsigned NOT NULL COMMENT '事業部分類',
  `title` varchar(255) NOT NULL COMMENT '頁面標題',
  `content` text NOT NULL COMMENT '內容',
  `author` varchar(50) DEFAULT NULL COMMENT '作者',
  `keyword` varchar(255) DEFAULT NULL COMMENT '關鍵字SEO',
  `description` varchar(255) DEFAULT NULL COMMENT '描述SEO',
  `image` varchar(100) DEFAULT NULL COMMENT '圖片路徑',
  `language` enum('cn','tw','en') NOT NULL DEFAULT 'cn' COMMENT '語言',
  `source` varchar(50) DEFAULT NULL COMMENT '來源',
  `share` enum('Y','N') NOT NULL DEFAULT 'N' COMMENT '分享',
  `attribute` mediumtext COMMENT '擴展屬性',
  `visibility` enum('Visible','Hidden') NOT NULL DEFAULT 'Hidden' COMMENT '可見性',
  `status` enum('Enabled','Disabled','Deleted') NOT NULL DEFAULT 'Disabled' COMMENT '狀態',
  `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',
  `mtime` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '編輯時間',
  PRIMARY KEY (`id`),
  KEY `FK_article_category` (`category_id`),
  KEY `ctime` (`ctime`),
  KEY `division_category_id` (`division_category_id`),
  KEY `division_id` (`division_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='內容'
/*!50100 PARTITION BY KEY (id)
PARTITIONS 16 */;

-- 數據導出被取消選擇。


-- 導出  表 inf.category 結構
CREATE TABLE IF NOT EXISTS `category` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `division_id` mediumint(8) unsigned NOT NULL COMMENT '分類所屬事業部',
  `name` varchar(20) NOT NULL COMMENT '分類名稱',
  `description` varchar(255) DEFAULT NULL COMMENT '分類表述',
  `language` enum('en','cn','tw') NOT NULL DEFAULT 'cn',
  `visibility` enum('Visible','Hidden') NOT NULL DEFAULT 'Hidden' COMMENT '可見性',
  `status` enum('Enabled','Disabled') NOT NULL DEFAULT 'Disabled' COMMENT '分類狀態',
  `parent_id` mediumint(8) unsigned DEFAULT NULL COMMENT '父節點',
  `path` varchar(255) NOT NULL DEFAULT '/' COMMENT '路徑',
  `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',
  `mtime` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改時間',
  PRIMARY KEY (`id`),
  KEY `path` (`path`),
  KEY `FK_category_division` (`division_id`),
  KEY `FK_category_category` (`parent_id`),
  CONSTRAINT `FK_category_category` FOREIGN KEY (`parent_id`) REFERENCES `category` (`id`),
  CONSTRAINT `FK_category_division` FOREIGN KEY (`division_id`) REFERENCES `division` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='分類';

-- 數據導出被取消選擇。


-- 導出  表 inf.category_has_template 結構
CREATE TABLE IF NOT EXISTS `category_has_template` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `category_id` mediumint(8) unsigned NOT NULL,
  `template_id` mediumint(8) unsigned NOT NULL,
  `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `category_id_template_id` (`category_id`,`template_id`),
  KEY `FK_category_has_template_template` (`template_id`),
  CONSTRAINT `FK_category_has_template_category` FOREIGN KEY (`category_id`) REFERENCES `category` (`id`),
  CONSTRAINT `FK_category_has_template_template` FOREIGN KEY (`template_id`) REFERENCES `template` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='分類模板';

-- 數據導出被取消選擇。


-- 導出  表 inf.division 結構
CREATE TABLE IF NOT EXISTS `division` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `description` varchar(50) DEFAULT NULL,
  `username` varchar(50) NOT NULL,
  `password` varchar(32) NOT NULL,
  `url` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='事業部表';

-- 數據導出被取消選擇。


-- 導出  過程 inf.netkiller 結構
DELIMITER //
//
DELIMITER ;


-- 導出  表 inf.netkiller_news 結構
CREATE TABLE IF NOT EXISTS `netkiller_news` (
  `no` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(200) DEFAULT NULL,
  `publish` date DEFAULT NULL,
  `description` longtext,
  `language` char(2) DEFAULT NULL,
  `kind` char(2) DEFAULT NULL,
  `display` char(1) DEFAULT NULL,
  `updatetime` datetime DEFAULT NULL,
  `mis` varchar(20) DEFAULT NULL,
  `image_b1` varchar(50) DEFAULT NULL,
  `image_s1` varchar(50) DEFAULT NULL,
  `image_b2` varchar(50) DEFAULT NULL,
  `image_s2` varchar(50) DEFAULT NULL,
  `area` varchar(2) DEFAULT NULL,
  `image_b3` varchar(50) DEFAULT NULL,
  `image_s3` varchar(50) DEFAULT NULL,
  `image_b4` varchar(50) DEFAULT NULL,
  `image_s4` varchar(50) DEFAULT NULL,
  `expertsId` int(11) DEFAULT NULL,
  `endDate` date DEFAULT NULL,
  `category` char(1) DEFAULT NULL COMMENT '0代表全部1代表外匯2代表貴金屬',
  `pair_id` varchar(40) DEFAULT NULL COMMENT '配對號',
  `curr_data` varchar(200) DEFAULT NULL COMMENT '以字元串的形式保存產品名稱、目標、止損、買或者賣,和建議買賣價',
  `is_index_dis` char(1) DEFAULT NULL COMMENT '0代表顯示 1代表不顯示',
  `account` varchar(20) DEFAULT NULL,
  `notice_category` varchar(100) DEFAULT NULL,
  `title2` varchar(1000) DEFAULT NULL,
  `SEO_TITLE` varchar(400) DEFAULT NULL,
  `SEO_KEYWORDS` varchar(400) DEFAULT NULL,
  `SEO_DESCRIPTION` varchar(800) DEFAULT NULL,
  `publish2` date DEFAULT NULL,
  `author` varchar(20) DEFAULT NULL,
  `sort` int(11) DEFAULT NULL,
  `urlstatus` char(1) DEFAULT NULL,
  `url` varchar(200) DEFAULT NULL,
  `knowledge_type` varchar(20) DEFAULT NULL,
  `video` varchar(300) DEFAULT NULL COMMENT '視頻',
  `audio` varchar(300) DEFAULT NULL COMMENT '音頻',
  `video_image` varchar(300) DEFAULT NULL COMMENT '視頻圖片',
  `equipment` varchar(20) DEFAULT NULL,
  `praise` int(11) DEFAULT NULL COMMENT '贊同(點贊)',
  `not_praise` int(11) DEFAULT NULL COMMENT '不讚同(點贊)',
  `currency_type` varchar(20) DEFAULT NULL COMMENT '貨幣類型',
  `publish_mobile` datetime DEFAULT NULL,
  `audio_time` varchar(10) DEFAULT NULL,
  `source` char(1) DEFAULT NULL,
  PRIMARY KEY (`no`)
) ENGINE=FEDERATED DEFAULT CHARSET=utf8 CONNECTION='mysql://netkiller:netkiller@192.168.4.1:3306/whdata/news';

-- 數據導出被取消選擇。


-- 導出  表 inf.netkiller_real_news 結構
CREATE TABLE IF NOT EXISTS `netkiller_real_news` (
  `no` int(11) NOT NULL AUTO_INCREMENT,
  `newsid` varchar(50) DEFAULT NULL COMMENT '新聞ID',
  `newstime` datetime DEFAULT NULL,
  `jointime` datetime DEFAULT NULL,
  `language` varchar(2) DEFAULT NULL,
  `name` varchar(200) DEFAULT NULL,
  `content` longtext,
  `type` int(11) DEFAULT NULL COMMENT '用來區分讀取各個不同的xml檔案',
  `SEO_TITLE` varchar(200) DEFAULT NULL,
  `SEO_KEYWORDS` varchar(200) DEFAULT NULL,
  `SEO_DESCRIPTION` varchar(500) DEFAULT NULL,
  PRIMARY KEY (`no`)
) ENGINE=FEDERATED DEFAULT CHARSET=utf8 CONNECTION='mysql://netkiller:netkiller@192.168.4.1:3306/whdata/real_news';

-- 數據導出被取消選擇。


-- 導出  表 inf.netkiller_video 結構
CREATE TABLE IF NOT EXISTS `netkiller_video` (
  `no` int(11) NOT NULL AUTO_INCREMENT,
  `video` varchar(300) DEFAULT NULL,
  `smallimage` varchar(100) DEFAULT NULL,
  `largeimage` varchar(100) DEFAULT NULL,
  `display` char(1) DEFAULT NULL,
  `language` char(2) DEFAULT NULL,
  `updatetime` datetime DEFAULT NULL,
  `mis` varchar(20) DEFAULT NULL,
  `sort` int(11) DEFAULT NULL,
  `title` varchar(200) DEFAULT NULL,
  `description` longtext,
  `kind` char(2) DEFAULT NULL,
  `publish` date DEFAULT NULL,
  `source` char(1) DEFAULT NULL,
  `equipment` varchar(20) DEFAULT NULL,
  `expertsId` int(11) DEFAULT NULL,
  `author` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`no`)
) ENGINE=FEDERATED DEFAULT CHARSET=utf8 CONNECTION='mysql://netkiller:netkiller@192.168.4.1:3306/whdata/news';

-- 數據導出被取消選擇。


-- 導出  表 inf.images 結構
CREATE TABLE IF NOT EXISTS `images` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `article_id` bigint(20) unsigned NOT NULL,
  `url` varchar(255) NOT NULL,
  `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 數據導出被取消選擇。


-- 導出  表 inf.statistical 結構
CREATE TABLE IF NOT EXISTS `statistical` (
  `id` bigint(20) unsigned DEFAULT NULL,
  `click` bigint(20) unsigned DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='統計表';

-- 數據導出被取消選擇。


-- 導出  表 inf.synchronous 結構
CREATE TABLE IF NOT EXISTS `synchronous` (
  `division_id` mediumint(8) unsigned NOT NULL COMMENT '事業部',
  `category_id` mediumint(8) unsigned NOT NULL COMMENT '分類',
  `type` varchar(8) NOT NULL COMMENT '事業部所屬類型',
  `table` enum('news','real_news','video','info','t_hotpoint','goldnews','t_review') NOT NULL COMMENT '同步表',
  `lang` enum('en','cn','tw') NOT NULL DEFAULT 'cn',
  `position` bigint(20) unsigned NOT NULL DEFAULT '1' COMMENT '位置',
  `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `mtime` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`category_id`),
  UNIQUE KEY `category_id_type` (`category_id`,`type`),
  KEY `FK_synchronous_division` (`division_id`),
  CONSTRAINT `FK_synchronous_category` FOREIGN KEY (`category_id`) REFERENCES `category` (`id`),
  CONSTRAINT `FK_synchronous_division` FOREIGN KEY (`division_id`) REFERENCES `division` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='數據同步設置';

-- 數據導出被取消選擇。


-- 導出  表 inf.template 結構
CREATE TABLE IF NOT EXISTS `template` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `division_id` mediumint(8) unsigned NOT NULL COMMENT '模板所屬分類',
  `name` varchar(50) NOT NULL COMMENT '模板名字',
  `decription` varchar(255) DEFAULT NULL COMMENT '簡短描述',
  `content` text NOT NULL COMMENT '模板內容',
  `type` enum('Category','List','Detail','Video') NOT NULL DEFAULT 'Category' COMMENT '模板類型',
  `status` enum('Enabled','Disabled') NOT NULL DEFAULT 'Disabled' COMMENT '模板狀態',
  `engine` enum('PHP','Smarty','Volt') NOT NULL DEFAULT 'PHP' COMMENT '模板引擎',
  `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間 ',
  `mtime` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改時間',
  PRIMARY KEY (`id`),
  KEY `FK_template_division` (`division_id`),
  CONSTRAINT `FK_template_division` FOREIGN KEY (`division_id`) REFERENCES `division` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='模板';

-- 數據導出被取消選擇。


-- 導出  表 inf.template_history 結構
CREATE TABLE IF NOT EXISTS `template_history` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `template_id` mediumint(8) unsigned NOT NULL,
  `division_id` mediumint(8) unsigned NOT NULL COMMENT '模板所屬分類',
  `name` varchar(50) NOT NULL COMMENT '模板名字',
  `decription` varchar(255) DEFAULT NULL COMMENT '簡短描述',
  `content` text NOT NULL COMMENT '模板內容',
  `type` enum('Category','List','Detail','Video') NOT NULL DEFAULT 'Category' COMMENT '模板類型',
  `status` enum('Enabled','Disabled') NOT NULL DEFAULT 'Disabled' COMMENT '模板狀態',
  `engine` enum('PHP','Smarty','Volt') NOT NULL DEFAULT 'PHP' COMMENT '模板引擎',
  `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間 ',
  `mtime` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改時間',
  PRIMARY KEY (`id`),
  KEY `FK_template_division` (`division_id`),
  KEY `FK_template_history_template` (`template_id`),
  CONSTRAINT `FK_template_history_division` FOREIGN KEY (`division_id`) REFERENCES `division` (`id`),
  CONSTRAINT `FK_template_history_template` FOREIGN KEY (`template_id`) REFERENCES `template` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='模板';

-- 數據導出被取消選擇。


-- 導出  表 inf.video 結構
CREATE TABLE IF NOT EXISTS `video` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `division_id` mediumint(8) unsigned NOT NULL COMMENT '所屬事業部',
  `category_id` mediumint(8) unsigned NOT NULL COMMENT '隷屬分類',
  `title` varchar(255) NOT NULL COMMENT '標題',
  `description` varchar(1024) DEFAULT NULL COMMENT '描述',
  `thumbnail` varchar(255) DEFAULT NULL COMMENT '縮圖',
  `image` varchar(255) DEFAULT NULL COMMENT '圖片',
  `video` varchar(255) NOT NULL COMMENT '視頻',
  `author` varchar(32) DEFAULT NULL COMMENT '作者',
  `language` enum('cn','tw','en') NOT NULL DEFAULT 'cn' COMMENT '語言',
  `player` enum('youku','JW Player') NOT NULL,
  `visibility` enum('Visible','Hidden') NOT NULL DEFAULT 'Hidden' COMMENT '可見否',
  `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',
  `mtime` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改時間',
  PRIMARY KEY (`id`),
  KEY `FK_videos_division` (`division_id`),
  KEY `FK_videos_category` (`category_id`),
  CONSTRAINT `FK_videos_category` FOREIGN KEY (`category_id`) REFERENCES `category` (`id`),
  CONSTRAINT `FK_videos_division` FOREIGN KEY (`division_id`) REFERENCES `division` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='視頻';

-- 數據導出被取消選擇。


-- 導出  觸發器 inf.category_before_insert 結構
SET @OLDTMP_SQL_MODE=@@SQL_MODE, SQL_MODE='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';
DELIMITER //
CREATE TRIGGER `category_before_insert` BEFORE UPDATE ON `category` FOR EACH ROW BEGIN
	IF old.parent_id IS NULL THEN
		-- new.parent_id IS NOT NULL
		set new.parent_id = NULL;
	END IF;
	IF new.id = new.parent_id THEN
		set new.parent_id = old.parent_id;
	END IF;
END//
DELIMITER ;
SET SQL_MODE=@OLDTMP_SQL_MODE;


-- 導出  觸發器 inf.template_before_update 結構
SET @OLDTMP_SQL_MODE=@@SQL_MODE, SQL_MODE='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';
DELIMITER //
CREATE TRIGGER `template_before_update` BEFORE UPDATE ON `template` FOR EACH ROW BEGIN
	INSERT INTO template_history(	`template_id`,  `division_id`,  `name`,  `decription`,  `content`,  `type`,  `status`,  `engine`,  `ctime`,  `mtime`)
	VALUES (old.id, old.division_id, old.name, old.decription, old.content, old.type, old.status, old.engine, old.ctime, old.mtime);
END//
DELIMITER ;
SET SQL_MODE=@OLDTMP_SQL_MODE;
/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;