You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
3.5 KiB
101 lines
3.5 KiB
-- SimpleChat 数据库初始化脚本
|
|
-- 创建数据库: chat.db
|
|
|
|
-- 用户表
|
|
CREATE TABLE IF NOT EXISTS users (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
username VARCHAR(50) UNIQUE NOT NULL,
|
|
password VARCHAR(100) NOT NULL,
|
|
nickname VARCHAR(50),
|
|
avatar VARCHAR(200) DEFAULT 'default.png',
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- 好友关系表
|
|
CREATE TABLE IF NOT EXISTS friendships (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
user_id INTEGER NOT NULL,
|
|
friend_id INTEGER NOT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (user_id) REFERENCES users(id),
|
|
FOREIGN KEY (friend_id) REFERENCES users(id),
|
|
UNIQUE(user_id, friend_id)
|
|
);
|
|
|
|
-- 消息表
|
|
CREATE TABLE IF NOT EXISTS messages (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
sender_id INTEGER NOT NULL,
|
|
receiver_id INTEGER,
|
|
group_id INTEGER,
|
|
content TEXT NOT NULL,
|
|
msg_type VARCHAR(20) DEFAULT 'text',
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (sender_id) REFERENCES users(id)
|
|
);
|
|
|
|
-- 群组表
|
|
CREATE TABLE IF NOT EXISTS groups (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name VARCHAR(100) NOT NULL,
|
|
creator_id INTEGER NOT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (creator_id) REFERENCES users(id)
|
|
);
|
|
|
|
-- 群组成员表
|
|
CREATE TABLE IF NOT EXISTS group_members (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
group_id INTEGER NOT NULL,
|
|
user_id INTEGER NOT NULL,
|
|
join_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (group_id) REFERENCES groups(id),
|
|
FOREIGN KEY (user_id) REFERENCES users(id),
|
|
UNIQUE(group_id, user_id)
|
|
);
|
|
|
|
-- 创建默认管理员账户 (密码: 123456)
|
|
INSERT OR IGNORE INTO users (username, password, nickname)
|
|
VALUES ('admin', 'e10adc3949ba59abbe56e057f20f883e', '系统管理员');
|
|
|
|
-- 创建测试用户
|
|
INSERT OR IGNORE INTO users (username, password, nickname)
|
|
VALUES
|
|
('user1', 'e10adc3949ba59abbe56e057f20f883e', '用户一'),
|
|
('user2', 'e10adc3949ba59abbe56e057f20f883e', '用户二'),
|
|
('user3', 'e10adc3949ba59abbe56e057f20f883e', '用户三');
|
|
|
|
-- 创建测试好友关系
|
|
INSERT OR IGNORE INTO friendships (user_id, friend_id)
|
|
SELECT u1.id, u2.id
|
|
FROM users u1, users u2
|
|
WHERE u1.username = 'admin' AND u2.username = 'user1'
|
|
OR u1.username = 'admin' AND u2.username = 'user2'
|
|
OR u1.username = 'user1' AND u2.username = 'user2';
|
|
|
|
-- 创建测试群组
|
|
INSERT OR IGNORE INTO groups (name, creator_id)
|
|
SELECT '测试群组', id FROM users WHERE username = 'admin';
|
|
|
|
-- 添加群组成员
|
|
INSERT OR IGNORE INTO group_members (group_id, user_id)
|
|
SELECT g.id, u.id
|
|
FROM groups g, users u
|
|
WHERE g.name = '测试群组'
|
|
AND u.username IN ('admin', 'user1', 'user2', 'user3');
|
|
|
|
-- 创建测试消息
|
|
INSERT OR IGNORE INTO messages (sender_id, receiver_id, content)
|
|
SELECT u1.id, u2.id, '你好,这是测试消息!'
|
|
FROM users u1, users u2
|
|
WHERE u1.username = 'admin' AND u2.username = 'user1';
|
|
|
|
-- 创建索引以提高查询性能
|
|
CREATE INDEX IF NOT EXISTS idx_messages_sender ON messages(sender_id);
|
|
CREATE INDEX IF NOT EXISTS idx_messages_receiver ON messages(receiver_id);
|
|
CREATE INDEX IF NOT EXISTS idx_messages_group ON messages(group_id);
|
|
CREATE INDEX IF NOT EXISTS idx_friendships_user ON friendships(user_id);
|
|
CREATE INDEX IF NOT EXISTS idx_friendships_friend ON friendships(friend_id);
|
|
CREATE INDEX IF NOT EXISTS idx_group_members_group ON group_members(group_id);
|
|
CREATE INDEX IF NOT EXISTS idx_group_members_user ON group_members(user_id); |