sql
-- 创建数据库
CREATE DATABASE IF NOT EXISTS JinYong_Wuxia DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE JinYong_Wuxia;
-- 1. 小说表
CREATE TABLE IF NOT EXISTS novels (
novel_id INT(11) NOT NULL AUTO_INCREMENT COMMENT '小说唯一ID',
novel_name VARCHAR(50) NOT NULL COMMENT '小说名称',
publish_year YEAR NULL COMMENT '出版年份',
novel_type VARCHAR(20) NOT NULL COMMENT '小说类型',
synopsis TEXT NULL COMMENT '小说简介',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
PRIMARY KEY (novel_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='金庸小说信息表';
-- 2. 人物表
CREATE TABLE IF NOT EXISTS characters (
character_id INT(11) NOT NULL AUTO_INCREMENT COMMENT '人物唯一ID',
character_name VARCHAR(30) NOT NULL COMMENT '人物姓名(含别名)',
gender CHAR(2) NULL COMMENT '性别',
personality VARCHAR(100) NULL COMMENT '性格描述',
character_desc TEXT NULL COMMENT '人物简介',
main_novel_id INT(11) NULL COMMENT '主要出场小说ID',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
PRIMARY KEY (character_id),
KEY idx_main_novel (main_novel_id),
CONSTRAINT fk_char_main_novel FOREIGN KEY (main_novel_id) REFERENCES novels (novel_id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='金庸小说人物信息表';
-- 3. 门派表
CREATE TABLE IF NOT EXISTS sects (
sect_id INT(11) NOT NULL AUTO_INCREMENT COMMENT '门派唯一ID',
sect_name VARCHAR(50) NOT NULL COMMENT '门派名称',
founder VARCHAR(30) NULL COMMENT '门派创立者',
sect_novel_id INT(11) NULL COMMENT '主要所属小说ID',
sect_desc TEXT NULL COMMENT '门派简介',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
PRIMARY KEY (sect_id),
KEY idx_sect_novel (sect_novel_id),
CONSTRAINT fk_sect_novel FOREIGN KEY (sect_novel_id) REFERENCES novels (novel_id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='金庸小说门派信息表';
-- 4. 武功表
CREATE TABLE IF NOT EXISTS martial_arts (
martial_id INT(11) NOT NULL AUTO_INCREMENT COMMENT '武功唯一ID',
martial_name VARCHAR(50) NOT NULL COMMENT '武功名称',
martial_type VARCHAR(20) NOT NULL COMMENT '武功类型',
founder VARCHAR(30) NULL COMMENT '武功创立者',
sect_id INT(11) NULL COMMENT '所属门派ID',
martial_novel_id INT(11) NULL COMMENT '主要所属小说ID',
martial_desc TEXT NULL COMMENT '武功简介',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
PRIMARY KEY (martial_id),
KEY idx_martial_sect (sect_id),
KEY idx_martial_novel (martial_novel_id),
CONSTRAINT fk_martial_sect FOREIGN KEY (sect_id) REFERENCES sects (sect_id) ON DELETE SET NULL,
CONSTRAINT fk_martial_novel FOREIGN KEY (martial_novel_id) REFERENCES novels (novel_id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='金庸小说武功信息表';
-- 5. 人物-小说关联表
CREATE TABLE IF NOT EXISTS character_novel (
character_id INT(11) NOT NULL COMMENT '人物ID',
novel_id INT(11) NOT NULL COMMENT '小说ID',
role_importance VARCHAR(20) NOT NULL COMMENT '人物在该小说中的重要性',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
PRIMARY KEY (character_id, novel_id),
CONSTRAINT fk_cn_character FOREIGN KEY (character_id) REFERENCES characters (character_id) ON DELETE CASCADE,
CONSTRAINT fk_cn_novel FOREIGN KEY (novel_id) REFERENCES novels (novel_id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='人物与出场小说的关联表';
-- 6. 人物-门派关联表
CREATE TABLE IF NOT EXISTS character_sect (
character_id INT(11) NOT NULL COMMENT '人物ID',
sect_id INT(11) NOT NULL COMMENT '门派ID',
sect_identity VARCHAR(30) NULL COMMENT '人物在门派中的身份',
join_time_desc VARCHAR(100) NULL COMMENT '加入/离开门派的描述',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
PRIMARY KEY (character_id, sect_id),
CONSTRAINT fk_cs_character FOREIGN KEY (character_id) REFERENCES characters (character_id) ON DELETE CASCADE,
CONSTRAINT fk_cs_sect FOREIGN KEY (sect_id) REFERENCES sects (sect_id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='人物与所属门派的关联表';
-- 7. 人物关系表
CREATE TABLE IF NOT EXISTS character_relation (
relation_id INT(11) NOT NULL AUTO_INCREMENT COMMENT '关系唯一ID',
character_a_id INT(11) NOT NULL COMMENT '关系方A的ID',
character_b_id INT(11) NOT NULL COMMENT '关系方B的ID',
relation_type VARCHAR(20) NOT NULL COMMENT '关系类型',
relation_desc TEXT NULL COMMENT '关系详细描述',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
PRIMARY KEY (relation_id),
KEY idx_char_a (character_a_id),
KEY idx_char_b (character_b_id),
CONSTRAINT fk_cr_char_a FOREIGN KEY (character_a_id) REFERENCES characters (character_id) ON DELETE CASCADE,
CONSTRAINT fk_cr_char_b FOREIGN KEY (character_b_id) REFERENCES characters (character_id) ON DELETE CASCADE,
CONSTRAINT ck_not_same_char CHECK (character_a_id != character_b_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='人物之间关系的关联表';
-- 8. 人物-武功关联表
CREATE TABLE IF NOT EXISTS character_martial_art (
character_id INT(11) NOT NULL COMMENT '人物ID',
martial_id INT(11) NOT NULL COMMENT '武功ID',
mastery_level VARCHAR(20) NOT NULL COMMENT '掌握程度',
acquire_desc VARCHAR(100) NULL COMMENT '习得方式描述',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
PRIMARY KEY (character_id, martial_id),
CONSTRAINT fk_cma_character FOREIGN KEY (character_id) REFERENCES characters (character_id) ON DELETE CASCADE,
CONSTRAINT fk_cma_martial FOREIGN KEY (martial_id) REFERENCES martial_arts (martial_id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='人物与掌握武功的关联表';
-- 插入示例数据
-- 插入小说数据
INSERT INTO novels (novel_name, publish_year, novel_type, synopsis) VALUES
('射雕英雄传', 1957, '长篇武侠', '以郭靖成长为主线,讲述其习得降龙十八掌、守护襄阳的故事'),
('神雕侠侣', 1959, '长篇武侠', '杨过与小龙女的十六年生死绝恋,兼述襄阳抗蒙大业'),
('倚天屠龙记', 1961, '长篇武侠', '张无忌从无名少年成长为明教教主,周旋于正邪两派的故事'),
('天龙八部', 1963, '长篇武侠', '萧峰、段誉、虚竹三位主角在江湖中的传奇经历');
-- 插入人物数据
INSERT INTO characters (character_name, gender, personality, character_desc, main_novel_id) VALUES
('郭靖', '男', '忠厚正直', '丐帮前帮主,习得降龙十八掌、九阴真经,坚守襄阳殉国', 1),
('黄蓉', '女', '聪慧机敏', '桃花岛主黄药师之女,助郭靖守襄阳,留下倚天屠龙秘密', 1),
('杨过', '男', '狂放深情', '杨康之子,断臂后自创黯然销魂掌,与小龙女隐居古墓', 2),
('小龙女', '女', '清冷脱俗', '古墓派掌门,与杨过上演十六年生死绝恋', 2),
('张无忌', '男', '仁厚宽容', '明教教主,习得九阳神功和乾坤大挪移,最终归隐', 3),
('张三丰', '男', '淡泊睿智', '武当派创始人,百岁高龄仍钻研武学,见证江湖变迁', 3),
('萧峰', '男', '豪迈重义', '契丹后裔,丐帮帮主,为宋辽和平自尽于雁门关', 4),
('段誉', '男', '痴情豁达', '大理世子,以六脉神剑和凌波微步纵横江湖,终成君主', 4);
-- 插入门派数据
INSERT INTO sects (sect_name, founder, sect_novel_id, sect_desc) VALUES
('丐帮', '未知', 1, '江湖第一大帮,成员多为乞丐,擅长降龙十八掌、打狗棒法,宗旨"行侠仗义"'),
('桃花岛', '黄药师', 1, '位于东海桃花岛,门派武功诡异,如"落英神剑掌""弹指神通"'),
('古墓派', '林朝英', 2, '位于终南山活死人墓,武功阴柔,轻功卓绝,代表武功"玉女心经"'),
('武当派', '张三丰', 3, '由张三丰创立,讲究以柔克刚,代表武功"武当太极拳""武当剑"'),
('明教', '未知', 3, '又称"魔教",教众遍布各地,有"乾坤大挪移"等绝学'),
('大理段氏', '段思平', 4, '大理国皇室,擅长一阳指和六脉神剑');
-- 插入武功数据
INSERT INTO martial_arts (martial_name, martial_type, founder, sect_id, martial_novel_id, martial_desc) VALUES
('降龙十八掌', '掌法', '乔峰', 1, 1, '刚猛无俦,丐帮镇帮绝学,共十八式,如"亢龙有悔""飞龙在天"'),
('打狗棒法', '棒法', '未知', 1, 1, '丐帮帮主信物打狗棒的配套武功,招式精妙,变化多端'),
('九阴真经', '内功', '黄裳', NULL, 1, '武林绝学,包含内功心法和各种武功招式,威力无穷'),
('黯然销魂掌', '掌法', '杨过', NULL, 2, '杨过在等待小龙女期间自创,需配合特定情绪才能发挥最大威力'),
('玉女心经', '内功', '林朝英', 3, 2, '古墓派镇派之宝,需男女合练,招式精妙,克制全真教武功'),
('九阳神功', '内功', '斗酒僧', NULL, 3, '与九阴真经齐名的内功心法,练成后百毒不侵,内力无穷'),
('乾坤大挪移', '内功', '波斯明教', 5, 3, '明教镇教之宝,可转移力道,复制对手武功'),
('六脉神剑', '剑法', '段思平', 6, 4, '大理段氏绝学,以指为剑,无形无相,威力极大');
-- 插入人物-小说关联数据
INSERT INTO character_novel (character_id, novel_id, role_importance) VALUES
(1, 1, '主角'),
(1, 2, '配角'),
(2, 1, '主角'),
(2, 2, '配角'),
(3, 2, '主角'),
(4, 2, '主角'),
(5, 3, '主角'),
(6, 2, '客串'),
(6, 3, '配角'),
(7, 4, '主角'),
(8, 4, '主角');
-- 插入人物-门派关联数据
INSERT INTO character_sect (character_id, sect_id, sect_identity, join_time_desc) VALUES
(1, 1, '帮主', '中年时期成为丐帮帮主,主持抗蒙大业'),
(2, 2, '传人', '桃花岛主黄药师之女,精通桃花岛所有武功'),
(3, 2, '弟子(后被逐)', '14岁随郭靖入桃花岛,因与郭芙冲突被逐'),
(3, 3, '传人', '被逐后入古墓派,师从小龙女,成为古墓派传人'),
(4, 3, '掌门', '自幼在古墓派长大,成年后成为古墓派掌门'),
(5, 5, '教主', '机缘巧合下成为明教第三十四代教主'),
(6, 4, '创始人', '中年创立武当派,收七大弟子,奠定武当派地位'),
(7, 1, '前帮主', '曾担任丐帮帮主,后因身世问题退位'),
(8, 6, '世子', '大理段氏皇族,后继承大理皇位');
-- 插入人物关系数据
INSERT INTO character_relation (character_a_id, character_b_id, relation_type, relation_desc) VALUES
(1, 2, '夫妻', '郭靖与黄蓉结为夫妻,共同守护襄阳,育有郭芙、郭襄、郭破虏'),
(1, 3, '叔侄', '郭靖是杨过的伯父,对杨过有养育之恩'),
(3, 4, '师徒/情侣', '杨过与小龙女最初为师徒,后发展为情侣,历经十六年分离终成眷属'),
(5, 6, '徒孙/师祖', '张无忌是张三丰徒孙,幼年曾受张三丰照料'),
(7, 8, '兄弟', '萧峰与段誉在松鹤楼结拜为兄弟'),
(6, 1, '朋友', '张三丰年轻时与郭靖相识,敬佩其侠义精神');
-- 插入人物-武功关联数据
INSERT INTO character_martial_art (character_id, martial_id, mastery_level, acquire_desc) VALUES
(1, 1, '精通', '洪七公在张家口传授前十五掌,后补全十八掌'),
(1, 2, '精通', '黄蓉传授打狗棒法,成为丐帮新任帮主'),
(1, 3, '精通', '在桃花岛从周伯通处习得九阴真经'),
(2, 3, '熟练', '自幼跟随父亲黄药师学习部分九阴真经'),
(3, 4, '独创', '杨过在十六年苦等小龙女期间自创的掌法'),
(3, 3, '熟练', '从神雕处获得九阴真经部分内容并修炼'),
(4, 5, '精通', '自幼在古墓派修炼玉女心经'),
(5, 6, '精通', '在昆仑山明教密道中习得完整九阳神功'),
(5, 7, '精通', '在明教密道中习得乾坤大挪移第七层'),
(7, 1, '精通', '丐帮绝学,萧峰将其发扬光大'),
(8, 8, '熟练', '大理段氏天赋,后在天龙寺习得六脉神剑');
以下是基于金庸武侠小说人物关系设计的完整SQL语句,包括数据库创建、表结构定义和示例数据插入:
以上SQL脚本包含以下内容:
-
数据库创建 :创建名为
JinYong_Wuxia
的数据库,使用utf8mb4字符集以支持中文存储 -
表结构创建:按照之前设计的8张表(小说表、人物表、门派表、武功表及4张关联表)创建完整结构,包含主键、外键约束和必要的索引
-
示例数据插入:
- 4部经典金庸小说(《射雕英雄传》《神雕侠侣》《倚天屠龙记》《天龙八部》)
- 8位核心人物(郭靖、黄蓉、杨过、小龙女等)
- 6大门派(丐帮、桃花岛、古墓派等)
- 8种著名武功(降龙十八掌、九阴真经等)
- 人物与小说、门派、武功的关联关系
- 人物之间的关系(夫妻、师徒、兄弟等)
执行这些SQL语句后,你将获得一个完整的金庸武侠小说人物关系数据库基础框架。你可以根据需要继续添加更多小说、人物和关系数据,或使用查询语句分析人物关系网络。
例如,你可以查询"杨过会哪些武功"、"郭靖在哪些小说中出场"或"丐帮有哪些著名人物"等信息。