init.sql 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. DROP DATABASE IF EXISTS HBlog;
  2. CREATE DATABASE HBlog;
  3. USE HBlog;
  4. CREATE TABLE IF NOT EXISTS role -- 角色表
  5. (
  6. RoleID INT PRIMARY KEY AUTO_INCREMENT,
  7. RoleName char(20) NOT NULL UNIQUE,
  8. WriteBlog bit DEFAULT 0, -- 写博客
  9. WriteComment bit DEFAULT 1, -- 写评论
  10. WriteMsg bit DEFAULT 1, -- 写留言
  11. CreateUser bit DEFAULT 0, -- 创建新用户
  12. ReadBlog bit DEFAULT 1, -- 读博客
  13. ReadComment bit DEFAULT 1, -- 读评论
  14. ReadMsg bit DEFAULT 1, -- 读留言
  15. ReadSecretMsg bit DEFAULT 0, -- 读私密留言
  16. ReadUserInfo bit DEFAULT 0, -- 读取用户信息
  17. DeleteBlog bit DEFAULT 0, -- 删除博客
  18. DeleteComment bit DEFAULT 0, -- 删除评论
  19. DeleteMsg bit DEFAULT 0, -- 删除留言
  20. DeleteUser bit DEFAULT 0, -- 删除用户
  21. ConfigureSystem bit DEFAULT 0, -- 配置系统
  22. ReadSystem bit DEFAULT 0 -- 读系统信息
  23. );
  24. CREATE TABLE IF NOT EXISTS user -- 创建用户表
  25. (
  26. ID INT PRIMARY KEY AUTO_INCREMENT,
  27. Email char(32) NOT NULL UNIQUE,
  28. PasswdHash char(128) NOT NULL,
  29. Role INT NOT NULL DEFAULT 3,
  30. FOREIGN KEY (Role) REFERENCES role (RoleID)
  31. );
  32. INSERT INTO role (RoleID,
  33. RoleName,
  34. WriteBlog,
  35. WriteComment,
  36. WriteMsg,
  37. CreateUser,
  38. ReadBlog,
  39. ReadComment,
  40. ReadMsg,
  41. ReadSecretMsg,
  42. ReadUserInfo,
  43. DeleteBlog,
  44. DeleteComment,
  45. DeleteMsg,
  46. DeleteUser,
  47. ConfigureSystem,
  48. ReadSystem)
  49. VALUES (1, 'Admin', 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), -- 管理员用户
  50. (2, 'Coordinator', 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1); -- 协管员用户
  51. INSERT INTO role (RoleID, RoleName)
  52. VALUES (3, 'Default'); -- 默认用户
  53. INSERT INTO role (RoleID, RoleName, WriteComment, WriteMsg)
  54. VALUES (4, 'Anonymous', 0, 0); -- 默认用户
  55. CREATE TABLE IF NOT EXISTS blog -- 创建博客表
  56. (
  57. ID INT PRIMARY KEY AUTO_INCREMENT, -- 文章 ID
  58. Auth INT NOT NULL, -- 作者
  59. Title char(20) NOT NULL, -- 标题
  60. SubTitle char(20) NOT NULL, -- 副标题
  61. Context TEXT NOT NULL, -- 内容
  62. CreateTime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 创建的时间
  63. UpdateTime DATETIME NOT NULL DEFAULT (CreateTime), -- 创建的时间
  64. Top BIT NOT NULL DEFAULT 0, -- 置顶
  65. FOREIGN KEY (Auth) REFERENCES user (ID)
  66. );
  67. CREATE VIEW blog_with_top AS
  68. SELECT *
  69. FROM blog
  70. ORDER BY Top DESC, UpdateTime DESC;
  71. CREATE TABLE IF NOT EXISTS archive -- 归档表
  72. (
  73. ID INT PRIMARY KEY AUTO_INCREMENT, -- 归档 ID
  74. Name CHAR(30) NOT NULL UNIQUE, -- 归档名称
  75. DescribeText char(100) NOT NULL -- 描述
  76. );
  77. CREATE TABLE IF NOT EXISTS blog_archive -- 归档表
  78. (
  79. BlogID INT, -- 文章ID
  80. ArchiveID INT, -- 归档ID
  81. FOREIGN KEY (BlogID) REFERENCES blog (ID),
  82. FOREIGN KEY (ArchiveID) REFERENCES archive (ID)
  83. );
  84. CREATE VIEW archive_with_count AS
  85. SELECT ID, Name, DescribeText, (SELECT Count(ArchiveID) FROM blog_archive WHERE blog_archive.ArchiveID = archive.ID) AS Count
  86. FROM archive;
  87. CREATE VIEW blog_archive_with_name AS
  88. SELECT BlogID, ArchiveID, archive.Name As ArchiveName, archive.DescribeText AS DescribeText
  89. FROM blog_archive
  90. LEFT JOIN archive on blog_archive.ArchiveID = archive.ID;
  91. CREATE VIEW blog_with_archive AS
  92. SELECT blog.ID AS BlogID,
  93. blog_archive.ArchiveID AS ArchiveID,
  94. Auth,
  95. Title,
  96. SubTitle,
  97. Context,
  98. CreateTime,
  99. UpdateTime,
  100. Top
  101. FROM blog
  102. RIGHT JOIN blog_archive ON blog.ID = blog_archive.BlogID;
  103. CREATE TABLE IF NOT EXISTS comment -- 评论表
  104. (
  105. ID INT PRIMARY KEY AUTO_INCREMENT, -- 评论 ID
  106. BlogID INT NOT NULL, -- 博客 ID
  107. Auth INT NOT NULL, -- 作者
  108. Context TEXT NOT NULL, -- 内容
  109. CreateTime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 创建的时间
  110. UpdateTime DATETIME NOT NULL DEFAULT (CreateTime), -- 创建的时间
  111. FOREIGN KEY (BlogID) REFERENCES blog (ID),
  112. FOREIGN KEY (Auth) REFERENCES user (ID)
  113. );
  114. CREATE VIEW comment_user AS
  115. SELECT comment.ID as CommentID, BlogID, Auth, user.Email as Email, Context, CreateTime, UpdateTime
  116. FROM comment
  117. LEFT JOIN user on user.ID = comment.Auth
  118. ORDER BY UpdateTime DESC;
  119. CREATE TABLE IF NOT EXISTS message -- 留言表
  120. (
  121. ID INT PRIMARY KEY AUTO_INCREMENT, -- 留言 ID
  122. Auth INT NOT NULL, -- 作者
  123. Context TEXT NOT NULL, -- 内容
  124. Secret BIT NOT NULL DEFAULT 0, -- 私密内容
  125. CreateTime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 创建的时间
  126. UpdateTime DATETIME NOT NULL DEFAULT (CreateTime), -- 创建的时间
  127. FOREIGN KEY (Auth) REFERENCES user (ID)
  128. );
  129. CREATE VIEW message_user AS
  130. SELECT message.ID as MsgID, Auth, user.Email as Email, Context, CreateTime, UpdateTime, Secret
  131. FROM message
  132. LEFT JOIN user on user.ID = message.Auth
  133. ORDER BY UpdateTime DESC;