数据库设计
# 数据库设计
## 设计图

## 创建数据库
> 约定:所有值默认均不可为空,无强制外键检查
```sql
USE MYBLOG;
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS `users`;
DROP TABLE IF EXISTS `articles`;
DROP TABLE IF EXISTS `visits`;
DROP TABLE IF EXISTS `categories`;
DROP TABLE IF EXISTS `feedback`;
DROP VIEW IF EXISTS `category_statistics`;
DROP VIEW IF EXISTS `articles_categories`;
```
### 用户表 USERS
> 注:目前仅管理员单用户登录
|字段名|类型|说明|
|-|-|-|
|id|INT UNSIGNED|用户表主键,自增|
|username|CHAR(24)|用户名,不可重复,用户凭此登录|
|password|CHAR(64)|用户密码散列|
```sql
CREATE TABLE `users` (
`id` INT UNSIGNED AUTO_INCREMENT NOT NULL,
`username` CHAR(24) NOT NULL,
`password` CHAR(64) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE (`username`)
);
```
### 文章表 ARTICLES
|字段名|类型|说明|
|-|-|-|
|id|INT UNSIGNED|文章表主键,自增|
|title|CHAR(255)|文章标题|
|author|CHAR(128)|作者|
|category_id|INT UNSIGNED|此文的分类ID,外键|
|pubdate|DATETIME|发布日期,默认为上传到数据库的时间|
|abstract|VARCHAR(512)|文章摘要|
|content|TEXT|文章主题内容,注:最大为16k|
|is_hidden|BOOLEAN|是否隐藏,默认为否,隐藏时游客不可见此文|
|clicks|BIGINT UNSIGNED|点击量,默认为0|
```sql
CREATE TABLE `articles` (
`id` INT UNSIGNED AUTO_INCREMENT NOT NULL,
`title` CHAR(255) NOT NULL,
`author` CHAR(128) NOT NULL ,
`category_id` INT UNSIGNED NOT NULL ,
`pubdate` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ,
`abstract` VARCHAR(512) NOT NULL,
`content` TEXT NOT NULL,
`is_hidden` BOOLEAN NOT NULL DEFAULT 0 ,
`clicks` BIGINT UNSIGNED NOT NULL DEFAULT 0,
INDEX(`title`),
INDEX(`pubdate`),
INDEX(`author`),
INDEX(`clicks`),
PRIMARY KEY (`id`)
);
```
### 访问量表 VISITS 暂时废弃
```
> 记录网站的在各个时段的访问量:访问日期,小时的组合是唯一的
|字段名|类型|说明|
|-|-|-|
|id|INT UNSIGNED|访问量表主键,自增|
|visit_date|DATE|访问的日期|
|visit_hour|TINYINT UNSIGNED|访问的小时,0~23|
|visit_times|BIGINT UNSIGNED|访问的次数
```sql
CREATE TABLE `visits` (
`id` INT UNSIGNED AUTO_INCREMENT NOT NULL,
`visit_date` DATE NOT NULL,
`visit_hour` TINYINT UNSIGNED NOT NULL,
`visit_times` BIGINT UNSIGNED NOT NULL DEFAULT 0,
UNIQUE (`visit_date`, `visit_hour`),
PRIMARY KEY (`id`)
);
```
### 分类表 CATEGORIES
|字段名|类型|说明|
|-|-|-|
|id|INT UNSIGNED|分类表主键,自增|
|alias|VARCHAR(24)|分类名,不可重复|
```sql
CREATE TABLE `categories` (
`id` INT UNSIGNED AUTO_INCREMENT NOT NULL,
`alias` CHAR(24) NOT NULL,
UNIQUE(`alias`),
PRIMARY KEY (`id`)
);
```
### 意见与反馈表 FEEDBACK
|字段名|类型|说明|
|-|-|-|
|id|INT UNSIGNED|反馈表主键,自增|
|name|varchar(24)|用户姓名,可空|
|email|varchar(128)|用户邮箱。可空|
|tele|varchar(14)|用户电话,可空|
|content|TEXT|反馈主体内容,16K|
```sql
CREATE TABLE `feedback` (
`id` INT UNSIGNED AUTO_INCREMENT NOT NULL,
`name` varchar(24) NULL ,
`email` varchar(128) NULL ,
`tele` varchar(14) NULL,
`content` TEXT NOT NULL,
PRIMARY KEY (`id`)
);
```
### 分类统计视图 category_statistics
|字段名|类型|说明|
|-|-|-|
|category_id|INT UNSIGNED|类别ID|
|category_alias|char|类别名称
|article_total |int|该类别文章数量|
```sql
CREATE VIEW category_statistics AS
SELECT c.id AS category_id, c.alias AS category_alias, COUNT(a.id) AS article_total FROM categories AS c LEFT JOIN articles AS a ON a.category_id = c.id WHERE 1 GROUP BY c.id;
```
### 文章视图 articles_categories
```sql
CREATE VIEW articles_categories AS
SELECT a.id AS id, title, author, category_id, alias, pubdate, abstract, clicks, is_hidden, content FROM articles AS a JOIN categories AS c ON a.category_id = c.id;
```
### 参照
```sql
ALTER TABLE `articles` ADD FOREIGN KEY (`category_id`) REFERENCES `categories`(`id`);
```
### 储存过程
暂无
# 测试数据
```sql
USE myblog;
INSERT INTO `myblog`.`users` (`username`, `password`) VALUES ('admin', 'admin');
INSERT INTO `myblog`.`categories` (`alias`) VALUES ('时政');
INSERT INTO `myblog`.`categories` (`alias`) VALUES ('美食');
INSERT INTO `myblog`.`categories` (`alias`) VALUES ('心情');
INSERT INTO `myblog`.`categories` (`alias`) VALUES ('航空航天');
INSERT INTO `myblog`.`articles` (`id`,`title`,`author`,`category_id`,`pubdate`,`abstract`,`content`,`is_hidden`,`clicks`) VALUES (4,'test','test',1,'2021-12-13 18:09:40','test','test',0,0);
INSERT INTO `myblog`.`articles` (`id`,`title`,`author`,`category_id`,`pubdate`,`abstract`,`content`,`is_hidden`,`clicks`) VALUES (5,'test2','test',2,'2021-12-13 18:09:40','test','test',0,10);
INSERT INTO `myblog`.`articles` (`id`,`title`,`author`,`category_id`,`pubdate`,`abstract`,`content`,`is_hidden`,`clicks`) VALUES (6,'test3','test',3,'2021-12-13 18:11:52','test','test',0,110);
INSERT INTO `myblog`.`articles` (`id`,`title`,`author`,`category_id`,`pubdate`,`abstract`,`content`,`is_hidden`,`clicks`) VALUES (7,'test4','test',4,'2021-11-13 18:11:52','test','test',0,3);
INSERT INTO `myblog`.`articles` (`id`,`title`,`author`,`category_id`,`pubdate`,`abstract`,`content`,`is_hidden`,`clicks`) VALUES (8,'从 Egg.js 到 NestJS,爱码客后端选型之路','ES2049 Studio',3,'2021-12-14 14:19:01','爱码客3.0 开始开发到现在已经过去快整整一年了,虽然我投入其中的时间只有短短4个月,但是在最初后端几乎只有我一个人投入的情况下,可以说也是研究了一些东西,蹚了二三次浑水,来来回回改过五六次结构,心里七上八下的时间也不少,当然最后折腾出来的东西肯定到不了九十分。但,这些都不重要了,事了拂衣去,深藏功(辛)与名(酸)。如今回头,只是把当时一些探索的历程简单记录一下,权当给这段经历画下一个省略号。。。','破\\n青梅竹马\\n爱码客是一个\\nNode\\n应用,在当时的阿里经济体里,提到\\nNode\\n应用的框架,Egg.js\\n可谓无人不知,无人不晓。作为阿里声名在外的一个重要开源产品,这几年它在集团内也是独占鳌头的一个态势。故而,Egg.js\\n当然是我们第一眼的选择。并且之前在\\n图灵计划\\n和\\nUTT\\n中我都与它并肩作战,现在再次相遇,那必然是驾轻就熟,三下五除二便能把一整个框架给建立起来。于是说干就干,立马根据\\nEgg.js\\n的规范,整理了一个代码框架进行了第一次汇报。\\n\\n主管之命,媒妁之言\\n第一次汇报,主管自然是欲扬先抑,于是在主管的耳提面命之下,我总结出了两个需要改进的点,并且知道了主管最终想要的是什么:一个标准化,但是高度可扩展的服务框架。最终的想法且先不提,让我们先看看这两个痛点是什么。\\n\\n第一点,Egg.js\\n是一个约定大于配置的框架\\n\\nEgg\\n奉行『约定优于配置』,按照一套统一的约定进行应用开发,团队内部采用这种方式可以减少开发人员的学习成本,开发人员不再是『钉子』,可以流动起来。\\n正因为如此,Egg.js\\n中对于目录的规范是有一个约束的,一个基础的\\nEgg.js\\n项目的目录结构如下:',0,0);
INSERT INTO `myblog`.`articles` (`id`,`title`,`author`,`category_id`,`pubdate`,`abstract`,`content`,`is_hidden`,`clicks`) VALUES (9,'当 Egg 遇到 TypeScript,收获茶叶蛋一枚','天猪',3,'2021-11-13 18:11:52','本文主要阐述:\\n\\n应用层\\nTS\\n开发规范\\n我们在工具链方面的支持,是如何来解决上述问题,让开发者几乎无感知并保持一致性的开发体验。','#\\n快速入门\\n通过骨架快速初始化:\\n\\n$\\nnpx\\negg-init\\n--type=ts\\nshowcase\\n$\\ncd\\nshowcase\\n&&\\nnpm\\ni\\n$\\nnpm\\nrun\\ndev\\n上述骨架会生成一个极简版的示例\\n\\n更完整的示例参见:eggjs/examples/hackernews-async-ts\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n#\\n目录规范\\n一些约束:\\n\\nEgg\\n目前没有计划使用\\nTS\\n重写。\\nEgg\\n以及它对应的插件,会提供对应的\\nindex.d.ts\\n文件方便开发者使用\\nTypeScript\\n只是其中一种社区实践,我们通过工具链给予一定程度的支持。\\n\\n\\n整体目录结构上跟\\nEgg\\n普通项目没啥区别:\\n\\ntypescript\\n代码风格,后缀名为\\nts\\ntypings\\n目录用于放置\\nd.ts\\n文件(大部分会自动生成)\\nshowcase\\n├──\\napp\\n│\\n\\n\\n├──\\ncontroller\\n│\\n\\n\\n│\\n\\n\\n└──\\nhome.ts\\n│\\n\\n\\n├──\\nservice\\n│\\n\\n\\n│\\n\\n\\n└──\\nnews.ts\\n│\\n\\n\\n└──\\nrouter.ts\\n├──\\nconfig\\n│\\n\\n\\n├──\\nconfig.default.ts\\n│\\n\\n\\n├──\\nconfig.local.ts\\n│\\n\\n\\n├──\\nconfig.prod.ts\\n│\\n\\n\\n└──\\nplugin.ts\\n├──\\ntest\\n│\\n\\n\\n└──\\n**/*.test.ts\\n├──\\ntypings\\n│\\n\\n\\n└──\\n**/*.d.ts\\n├──\\nREADME.md\\n├──\\npackage.json\\n├──\\ntsconfig.json\\n└──\\ntslint.json\\n##\\nController\\n//\\napp/controller/home.ts\\nimport\\n{\\nController\\n}\\nfrom\\n\'egg\';\\n\\nexport\\ndefault\\nclass\\nHomeController\\nextends\\nController\\n{\\n\\n\\npublic\\nasync\\nindex()\\n{\\n\\n\\n\\n\\nconst\\n{\\nctx,\\nservice\\n}\\n=\\nthis;\\n\\n\\n\\n\\nconst\\npage\\n=\\nctx.query.page;\\n\\n\\n\\n\\nconst\\nresult\\n=\\nawait\\nservice.news.list(page);\\n\\n\\n\\n\\nawait\\nctx.render(\'home.tpl\',\\nresult);\\n\\n\\n}\\n}\\n##\\nRouter\\n//\\napp/router.ts\\nimport\\n{\\nApplication\\n}\\nfrom\\n\'egg\';\\n\\nexport\\ndefault\\n(app:\\nApplication)\\n=>\\n{\\n\\n\\nconst\\n{\\nrouter,\\ncontroller\\n}\\n=\\napp;\\n\\n\\nrouter.get(\'/\',\\ncontroller.home.index);\\n};\\n##\\nService\\n//\\napp/service/news.ts\\nimport\\n{\\nService\\n}\\nfrom\\n\'egg\';\\n\\nexport\\ndefault\\nclass\\nNewsService\\nextends\\nService\\n{\\n\\n\\npublic\\nasync\\nlist(page?:\\nnumber):\\nPromise<NewsItem[]>\\n{\\n\\n\\n\\n\\nreturn\\n[];\\n\\n\\n}\\n}\\n\\nexport\\ninterface\\nNewsItem\\n{\\n\\n\\nid:\\nnumber;\\n\\n\\ntitle:\\nstring;\\n}\\n##\\nMiddleware\\n//\\napp/middleware/robot.ts\\n\\nimport\\n{\\nContext\\n}\\nfrom\\n\'egg\';\\n\\nexport\\ndefault\\nfunction\\nrobotMiddleware()\\n{\\n\\n\\nreturn\\nasync\\n(ctx:\\nContext,\\nnext:\\nany)\\n=>\\n{\\n\\n\\n\\n\\nawait\\nnext();\\n\\n\\n};\\n}\\n因为\\nMiddleware\\n定义是支持入参,第一个参数为同名的\\nConfig,如有需求,可以用完整版:',0,0);
INSERT INTO `myblog`.`articles` (`id`,`title`,`author`,`category_id`,`pubdate`,`abstract`,`content`,`is_hidden`,`clicks`) VALUES (10,'《三体》之外,中国科幻文学找到生存法则了吗','蒋肖斌 中国青年报',3,'2021-12-14 08:22:00','距离刘慈欣开始在《科幻世界》连载《三体》,已经过去了15年;距离《三体》获得雨果奖,也已过去了6年;但最近科幻的大新闻,还是《三体》,它的影视化终于有了新动静。\\n\\n作为《三体》的“骨灰级粉丝”,90后姑娘王诺诺发现,《三体》已成为“三体学”,可以将生活中的一切现象用《三体》来解释:职场有“黑暗森林法则”,商战有“降维打击”……王诺诺毕业于剑桥大学,曾在互联网大厂工作,正在创业中,职业变了,“兼职”一直没变——她是一名科幻作家。\\n\\n读《三体》的孩子长大了,在《三体》之外,中国科幻文学找到自己的生存法则了吗?','《假如记忆可以移植》让科幻“一夜爆红”\\n\\n如果说圈外人眼中的中国科幻目前约等于“刘慈欣+《三体》”,那么科幻文学期刊就约等于《科幻世界》。在《科幻世界》副总编姚海军的记忆中,期刊曾在2000年创下月发行量40万册的纪录。\\n\\n有必然也有偶然。毕竟在20年前,期刊市场整体比较红火,“40万也不是一个多了不起的数字”。1999年,发生了一个偶发事件,那一年的高考语文作文题是《假如记忆可以移植》,而在高考前夕的《科幻世界》第六期上恰好刊发了相关小说,这让不少家长看到了这本杂志的“押题”功能,导致翌年订阅量蹿升。\\n\\n《科幻世界》目前的发行量在十万余册,距离巅峰的40万册有差距。但姚海军介绍,现在已经不只有这一本期刊,而是成为一个系列,还有《科幻世界·译文版》《科幻世界·少年版》《小牛顿》等,从受众范围来看,覆盖了更广泛的人群。\\n\\n姚海军说,事实上,科幻文学作为类型文学,是比较适合大众阅读的。但在中国,情况稍微复杂一些,科幻还承担着科普、传播科学的功能——或者说使命,不仅要让读者读得愉悦,它还要倡导想象力,鼓励孩子将目光投向未来。\\n\\n王诺诺小的时候,外公给她买了不少科幻的书,“也许都不能称之为科幻,更像是科学童话,带一点科普”。长大一些后,有了自己的零花钱,她就去书报亭里买《科幻世界》。看着看着,她有了写的冲动。\\n\\n“科幻对我的吸引力,小时候是觉得有趣好玩,年龄越大,越觉得这是一种很奢侈的东西。它与生活无关,甚至朋友聚会的时候都不能说出来炫耀,但就是这样一个东西,带给我很大的放松。”王诺诺打了个比方,读科幻和写科幻对她来说,就像中年男人下班回家、不立刻上楼、坐在车里抽的那根烟,是对于生活和工作的一个短暂抽离。\\n\\n《三体》像一个导火索,而“火药”积攒了许久\\n\\n姚海军主编的“中国科幻基石丛书”启动于2003年,收录了《三体》等作品。当时,姚海军在丛书的序言中写道,中国科幻与美国科幻的差距,实际上是市场化程度的差距。美国科幻从期刊到图书到影视再到游戏和玩具,已经形成了一条完整的产业链;而中国的图书出版仍然处于这样一种局面:读者的阅读需求不能满足,出版者却感叹于科幻书那区区几千册的销量。\\n\\n十几年过去了,《三体》像一个导火索,而“火药”积攒了许久。姚海军认为,从创作的角度,“《三体》热”带来一个效应,“就像一群歌手在唱歌,有一个人把调门起高了,那大家的起点也都变得高了起来”;从出版的角度,近些年,科幻文学的出版量有所增加;更重要的是,创作和出版,推动了中国科幻的产业化步伐。\\n\\n在《三体》之前,国内几乎没有科幻产业的概念。科幻产业不仅是图书杂志,还是影视、游戏、动漫、展览等周边产品。也许现在科幻还没有那么火,但姚海军觉得,这是一个阶段性的问题,科幻的产业化刚刚起步,“当越来越多的作品被影视化,小说与其他产品之间有了越来越多的互动,我们就能看到那一天”。\\n\\n中国人民大学文学院教授杨庆祥说,“可以说刘慈欣凭一己之力,把整个中国的科幻带到一个非常高的层次”——不仅是创作,还有传播,成为现象级;不仅是刘慈欣和《三体》成为现象级,还有整个科幻文学,从写作到阅读,成为一股风潮,这其中也包括《流浪地球》的热映。中国观众以前很少热衷去看一部科幻小说或者科幻电影,市场上这样的产品也非常少。\\n\\n在杨庆祥看来,纵观西方科幻文学的发展史,有一个显著特点,就是科幻写作的产业化。一个科幻作家写作的目的,并不只是一个小说,而是追求IP化的产业链。\\n\\n欧美科幻的早期繁荣,出现于上世纪30年代的“纸浆时代”。那时候,科幻小说被认为是一种通俗小说,印在废纸化浆做的发行量很大的廉价杂志上。所以,从某种意义上说,科幻从一开始就有商品化和产业化的属性,走的是量和市场。\\n\\n“中国的电影工业还在趋于成熟的路上,对于《三体》影视化的振奋,不仅是文学圈的人振奋,这条产业链上每一部分的人都振奋,它的市场意义要大于文学意义。”杨庆祥说。\\n\\n王诺诺发现,现在中国的科幻粉丝更多是学生、年轻人,偏低龄;而在西方的科幻展上,会看到不少40多岁的资深粉。“我们还没有发展到那一步,再过20年,年轻人进入中年,也许依然热爱科幻。”\\n\\n一个行业是否有潜力,就看有没有年轻人涌入\\n\\n在姚海军的观察中,科幻文学在今天,最大的变化是越来越“多元”,各种类型、各种主题的作品,都有自己的受众。“以前,《三体》这样的硬科幻小说是主流;现在,郝景芳、陈楸帆、韩松、宝树、江波……这些作家的作品风格各异,但都有自己的拥趸。”姚海军说,科幻的繁荣就应该是这样的,不仅数量大,还要多元化。\\n\\n杨庆祥曾主编作家出版社“青·科幻”丛书,丛书收录了一批青年科幻作家的代表作。年轻作者们在《三体》树立的“硬核”标准之外,探索新的方向。“判断一个行业是否有潜力,就看有没有年轻人的涌入。现在越来越多的年轻人加入科幻写作的群体,我对科幻的未来是乐观的。”\\n\\n杨庆祥认为,将科幻文学划分为类型文学,是比较机械的划分方式,比如,1818年玛丽·雪莱的小说《弗兰肯斯坦》,被认为是科幻文学的鼻祖,但同时也是严肃文学。科幻文学不缺乏文学性,更不是没有受众,“在中国人民大学校园,商学院的、环境学院的、劳动人事学院的学生,他们都会看科幻”。\\n\\n不同于前辈们,王诺诺的第一个科幻作品,是在互联网上发表的,之后出版过《地球无应答》等作品。在年轻人云集的互联网问答社区知乎,“科幻”是一个热门分类,有362万人关注,3.3万个问题引发过近50万次讨论。王诺诺的认证信息是“科幻作家”,拥有近48万粉丝。用户点击和付费阅读,都可以为她带来收入,纸质出版不再是科幻作家的唯一出路。\\n\\n经济学专业出身的王诺诺,认为科幻文学要首先满足核心读者的阅读快乐,打动了核心读者和版权需求方,会让科幻破圈更容易;等到了整体繁荣的阶段,不考虑商业的科幻文学也会有安身之处。\\n\\n“十几年前,我们基本上只有为热爱而创作的科幻作家,鲜有为版税而创作的科幻作家,专职写作是一个遥不可及的梦。但今天已经有一些年轻人在尝试,科幻产业的发展给他们带来更多机会。”姚海军高兴地看到,现在每年都有各种科幻征文比赛,出版社在找好的科幻作品,影视公司在寻求科幻类型的剧本……科幻作家有了更广阔的生存空间。\\n\\n距离刘慈欣开始在《科幻世界》连载《三体》,已经过去了15年;距离《三体》获得雨果奖,也已过去了6年;但最近科幻的大新闻,还是《三体》,它的影视化终于有了新动静。\\n\\n作为《三体》的“骨灰级粉丝”,90后姑娘王诺诺发现,《三体》已成为“三体学”,可以将生活中的一切现象用《三体》来解释:职场有“黑暗森林法则”,商战有“降维打击”……王诺诺毕业于剑桥大学,曾在互联网大厂工作,正在创业中,职业变了,“兼职”一直没变——她是一名科幻作家。\\n\\n读《三体》的孩子长大了,在《三体》之外,中国科幻文学找到自己的生存法则了吗?\\n\\n《假如记忆可以移植》让科幻“一夜爆红”\\n\\n如果说圈外人眼中的中国科幻目前约等于“刘慈欣+《三体》”,那么科幻文学期刊就约等于《科幻世界》。在《科幻世界》副总编姚海军的记忆中,期刊曾在2000年创下月发行量40万册的纪录。\\n\\n有必然也有偶然。毕竟在20年前,期刊市场整体比较红火,“40万也不是一个多了不起的数字”。1999年,发生了一个偶发事件,那一年的高考语文作文题是《假如记忆可以移植》,而在高考前夕的《科幻世界》第六期上恰好刊发了相关小说,这让不少家长看到了这本杂志的“押题”功能,导致翌年订阅量蹿升。\\n\\n《科幻世界》目前的发行量在十万余册,距离巅峰的40万册有差距。但姚海军介绍,现在已经不只有这一本期刊,而是成为一个系列,还有《科幻世界·译文版》《科幻世界·少年版》《小牛顿》等,从受众范围来看,覆盖了更广泛的人群。\\n\\n姚海军说,事实上,科幻文学作为类型文学,是比较适合大众阅读的。但在中国,情况稍微复杂一些,科幻还承担着科普、传播科学的功能——或者说使命,不仅要让读者读得愉悦,它还要倡导想象力,鼓励孩子将目光投向未来。\\n\\n王诺诺小的时候,外公给她买了不少科幻的书,“也许都不能称之为科幻,更像是科学童话,带一点科普”。长大一些后,有了自己的零花钱,她就去书报亭里买《科幻世界》。看着看着,她有了写的冲动。\\n\\n“科幻对我的吸引力,小时候是觉得有趣好玩,年龄越大,越觉得这是一种很奢侈的东西。它与生活无关,甚至朋友聚会的时候都不能说出来炫耀,但就是这样一个东西,带给我很大的放松。”王诺诺打了个比方,读科幻和写科幻对她来说,就像中年男人下班回家、不立刻上楼、坐在车里抽的那根烟,是对于生活和工作的一个短暂抽离。\\n\\n《三体》像一个导火索,而“火药”积攒了许久\\n\\n姚海军主编的“中国科幻基石丛书”启动于2003年,收录了《三体》等作品。当时,姚海军在丛书的序言中写道,中国科幻与美国科幻的差距,实际上是市场化程度的差距。美国科幻从期刊到图书到影视再到游戏和玩具,已经形成了一条完整的产业链;而中国的图书出版仍然处于这样一种局面:读者的阅读需求不能满足,出版者却感叹于科幻书那区区几千册的销量。\\n\\n十几年过去了,《三体》像一个导火索,而“火药”积攒了许久。姚海军认为,从创作的角度,“《三体》热”带来一个效应,“就像一群歌手在唱歌,有一个人把调门起高了,那大家的起点也都变得高了起来”;从出版的角度,近些年,科幻文学的出版量有所增加;更重要的是,创作和出版,推动了中国科幻的产业化步伐。\\n\\n在《三体》之前,国内几乎没有科幻产业的概念。科幻产业不仅是图书杂志,还是影视、游戏、动漫、展览等周边产品。也许现在科幻还没有那么火,但姚海军觉得,这是一个阶段性的问题,科幻的产业化刚刚起步,“当越来越多的作品被影视化,小说与其他产品之间有了越来越多的互动,我们就能看到那一天”。\\n\\n中国人民大学文学院教授杨庆祥说,“可以说刘慈欣凭一己之力,把整个中国的科幻带到一个非常高的层次”——不仅是创作,还有传播,成为现象级;不仅是刘慈欣和《三体》成为现象级,还有整个科幻文学,从写作到阅读,成为一股风潮,这其中也包括《流浪地球》的热映。中国观众以前很少热衷去看一部科幻小说或者科幻电影,市场上这样的产品也非常少。\\n\\n在杨庆祥看来,纵观西方科幻文学的发展史,有一个显著特点,就是科幻写作的产业化。一个科幻作家写作的目的,并不只是一个小说,而是追求IP化的产业链。\\n\\n欧美科幻的早期繁荣,出现于上世纪30年代的“纸浆时代”。那时候,科幻小说被认为是一种通俗小说,印在废纸化浆做的发行量很大的廉价杂志上。所以,从某种意义上说,科幻从一开始就有商品化和产业化的属性,走的是量和市场。\\n\\n“中国的电影工业还在趋于成熟的路上,对于《三体》影视化的振奋,不仅是文学圈的人振奋,这条产业链上每一部分的人都振奋,它的市场意义要大于文学意义。”杨庆祥说。\\n\\n王诺诺发现,现在中国的科幻粉丝更多是学生、年轻人,偏低龄;而在西方的科幻展上,会看到不少40多岁的资深粉。“我们还没有发展到那一步,再过20年,年轻人进入中年,也许依然热爱科幻。”\\n\\n一个行业是否有潜力,就看有没有年轻人涌入\\n\\n在姚海军的观察中,科幻文学在今天,最大的变化是越来越“多元”,各种类型、各种主题的作品,都有自己的受众。“以前,《三体》这样的硬科幻小说是主流;现在,郝景芳、陈楸帆、韩松、宝树、江波……这些作家的作品风格各异,但都有自己的拥趸。”姚海军说,科幻的繁荣就应该是这样的,不仅数量大,还要多元化。\\n\\n杨庆祥曾主编作家出版社“青·科幻”丛书,丛书收录了一批青年科幻作家的代表作。年轻作者们在《三体》树立的“硬核”标准之外,探索新的方向。“判断一个行业是否有潜力,就看有没有年轻人的涌入。现在越来越多的年轻人加入科幻写作的群体,我对科幻的未来是乐观的。”\\n\\n杨庆祥认为,将科幻文学划分为类型文学,是比较机械的划分方式,比如,1818年玛丽·雪莱的小说《弗兰肯斯坦》,被认为是科幻文学的鼻祖,但同时也是严肃文学。科幻文学不缺乏文学性,更不是没有受众,“在中国人民大学校园,商学院的、环境学院的、劳动人事学院的学生,他们都会看科幻”。\\n\\n不同于前辈们,王诺诺的第一个科幻作品,是在互联网上发表的,之后出版过《地球无应答》等作品。在年轻人云集的互联网问答社区知乎,“科幻”是一个热门分类,有362万人关注,3.3万个问题引发过近50万次讨论。王诺诺的认证信息是“科幻作家”,拥有近48万粉丝。用户点击和付费阅读,都可以为她带来收入,纸质出版不再是科幻作家的唯一出路。\\n\\n经济学专业出身的王诺诺,认为科幻文学要首先满足核心读者的阅读快乐,打动了核心读者和版权需求方,会让科幻破圈更容易;等到了整体繁荣的阶段,不考虑商业的科幻文学也会有安身之处。\\n\\n“十几年前,我们基本上只有为热爱而创作的科幻作家,鲜有为版税而创作的科幻作家,专职写作是一个遥不可及的梦。但今天已经有一些年轻人在尝试,科幻产业的发展给他们带来更多机会。”姚海军高兴地看到,现在每年都有各种科幻征文比赛,出版社在找好的科幻作品,影视公司在寻求科幻类型的剧本……科幻作家有了更广阔的生存空间。',0,20);
``