Improved database schema
- Some queries are faster due to better index ordering - Database is smaller thanks to splitting message_channel table and adding WITHOUT ROWID where helpful
This commit is contained in:
		
							parent
							
								
									21156446ee
								
							
						
					
					
						commit
						fcbb045cbb
					
				
					 11 changed files with 114 additions and 93 deletions
				
			
		
							
								
								
									
										61
									
								
								db/ooye-schema.sql
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								db/ooye-schema.sql
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,61 @@
 | 
			
		|||
BEGIN TRANSACTION;
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "sim" (
 | 
			
		||||
	"discord_id"	TEXT NOT NULL UNIQUE,
 | 
			
		||||
	"sim_name"	TEXT NOT NULL UNIQUE,
 | 
			
		||||
	"localpart"	TEXT NOT NULL UNIQUE,
 | 
			
		||||
	"mxid"	TEXT NOT NULL UNIQUE,
 | 
			
		||||
	PRIMARY KEY("discord_id")
 | 
			
		||||
);
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "webhook" (
 | 
			
		||||
	"channel_id"	TEXT NOT NULL UNIQUE,
 | 
			
		||||
	"webhook_id"	TEXT NOT NULL UNIQUE,
 | 
			
		||||
	"webhook_token"	TEXT NOT NULL,
 | 
			
		||||
	PRIMARY KEY("channel_id")
 | 
			
		||||
);
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "sim_member" (
 | 
			
		||||
	"mxid"	TEXT NOT NULL,
 | 
			
		||||
	"room_id"	TEXT NOT NULL,
 | 
			
		||||
	"profile_event_content_hash"	BLOB,
 | 
			
		||||
	PRIMARY KEY("room_id","mxid")
 | 
			
		||||
) WITHOUT ROWID;
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "member_cache" (
 | 
			
		||||
	"room_id"	TEXT NOT NULL,
 | 
			
		||||
	"mxid"	TEXT NOT NULL,
 | 
			
		||||
	"displayname"	TEXT,
 | 
			
		||||
	"avatar_url"	TEXT,
 | 
			
		||||
	PRIMARY KEY("room_id","mxid")
 | 
			
		||||
) WITHOUT ROWID;
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "file" (
 | 
			
		||||
	"discord_url"	TEXT NOT NULL,
 | 
			
		||||
	"mxc_url"	TEXT NOT NULL,
 | 
			
		||||
	PRIMARY KEY("discord_url")
 | 
			
		||||
) WITHOUT ROWID;
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "guild_space" (
 | 
			
		||||
	"guild_id"	TEXT NOT NULL,
 | 
			
		||||
	"space_id"	TEXT NOT NULL,
 | 
			
		||||
	PRIMARY KEY("guild_id")
 | 
			
		||||
) WITHOUT ROWID;
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "channel_room" (
 | 
			
		||||
	"channel_id"	TEXT NOT NULL,
 | 
			
		||||
	"room_id"	TEXT NOT NULL,
 | 
			
		||||
	"name"	TEXT NOT NULL,
 | 
			
		||||
	"nick"	TEXT,
 | 
			
		||||
	"thread_parent"	TEXT,
 | 
			
		||||
	"custom_avatar"	TEXT,
 | 
			
		||||
	PRIMARY KEY("channel_id","room_id")
 | 
			
		||||
);
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "message_channel" (
 | 
			
		||||
	"message_id"	TEXT NOT NULL,
 | 
			
		||||
	"channel_id"	TEXT NOT NULL,
 | 
			
		||||
	PRIMARY KEY("message_id")
 | 
			
		||||
) WITHOUT ROWID;
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "event_message" (
 | 
			
		||||
	"event_id"	TEXT NOT NULL,
 | 
			
		||||
	"message_id"	TEXT NOT NULL,
 | 
			
		||||
	"event_type"	TEXT,
 | 
			
		||||
	"event_subtype"	TEXT,
 | 
			
		||||
	"part"	INTEGER NOT NULL,
 | 
			
		||||
	"source"	INTEGER NOT NULL,
 | 
			
		||||
	PRIMARY KEY("message_id","event_id")
 | 
			
		||||
) WITHOUT ROWID;
 | 
			
		||||
COMMIT;
 | 
			
		||||
| 
						 | 
				
			
			@ -1,63 +1,3 @@
 | 
			
		|||
BEGIN TRANSACTION;
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "guild_space" (
 | 
			
		||||
	"guild_id"	TEXT NOT NULL UNIQUE,
 | 
			
		||||
	"space_id"	TEXT NOT NULL UNIQUE,
 | 
			
		||||
	PRIMARY KEY("guild_id")
 | 
			
		||||
);
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "file" (
 | 
			
		||||
	"discord_url"	TEXT NOT NULL UNIQUE,
 | 
			
		||||
	"mxc_url"	TEXT NOT NULL UNIQUE,
 | 
			
		||||
	PRIMARY KEY("discord_url")
 | 
			
		||||
);
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "sim" (
 | 
			
		||||
	"discord_id"	TEXT NOT NULL UNIQUE,
 | 
			
		||||
	"sim_name"	TEXT NOT NULL UNIQUE,
 | 
			
		||||
	"localpart"	TEXT NOT NULL UNIQUE,
 | 
			
		||||
	"mxid"	TEXT NOT NULL UNIQUE,
 | 
			
		||||
	PRIMARY KEY("discord_id")
 | 
			
		||||
);
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "sim_member" (
 | 
			
		||||
	"mxid"	TEXT NOT NULL,
 | 
			
		||||
	"room_id"	TEXT NOT NULL,
 | 
			
		||||
	"profile_event_content_hash"	BLOB,
 | 
			
		||||
	PRIMARY KEY("mxid","room_id")
 | 
			
		||||
);
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "webhook" (
 | 
			
		||||
	"channel_id"	TEXT NOT NULL UNIQUE,
 | 
			
		||||
	"webhook_id"	TEXT NOT NULL UNIQUE,
 | 
			
		||||
	"webhook_token"	TEXT NOT NULL,
 | 
			
		||||
	PRIMARY KEY("channel_id")
 | 
			
		||||
);
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "channel_room" (
 | 
			
		||||
	"channel_id"	TEXT NOT NULL UNIQUE,
 | 
			
		||||
	"room_id"	TEXT NOT NULL UNIQUE,
 | 
			
		||||
	"name"	TEXT,
 | 
			
		||||
	"nick"	TEXT,
 | 
			
		||||
	"thread_parent"	TEXT,
 | 
			
		||||
	"custom_avatar"	TEXT,
 | 
			
		||||
	PRIMARY KEY("channel_id")
 | 
			
		||||
);
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "event_message" (
 | 
			
		||||
	"event_id"	TEXT NOT NULL,
 | 
			
		||||
	"event_type"	TEXT,
 | 
			
		||||
	"event_subtype"	TEXT,
 | 
			
		||||
	"message_id"	TEXT NOT NULL,
 | 
			
		||||
	"channel_id"	TEXT,
 | 
			
		||||
	"part"	INTEGER NOT NULL,
 | 
			
		||||
	"source"	INTEGER NOT NULL,
 | 
			
		||||
	PRIMARY KEY("event_id","message_id")
 | 
			
		||||
);
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "member_cache" (
 | 
			
		||||
	"room_id"	TEXT NOT NULL,
 | 
			
		||||
	"mxid"	TEXT NOT NULL,
 | 
			
		||||
	"displayname"	TEXT,
 | 
			
		||||
	"avatar_url"	TEXT,
 | 
			
		||||
	PRIMARY KEY("room_id", "mxid")
 | 
			
		||||
);
 | 
			
		||||
COMMIT;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BEGIN TRANSACTION;
 | 
			
		||||
 | 
			
		||||
INSERT INTO guild_space (guild_id, space_id) VALUES
 | 
			
		||||
| 
						 | 
				
			
			@ -80,22 +20,35 @@ INSERT INTO sim (discord_id, sim_name, localpart, mxid) VALUES
 | 
			
		|||
INSERT INTO sim_member (mxid, room_id, profile_event_content_hash) VALUES
 | 
			
		||||
('@_ooye_bojack_horseman:cadence.moe', '!uCtjHhfGlYbVnPVlkG:cadence.moe', NULL);
 | 
			
		||||
 | 
			
		||||
INSERT INTO event_message (event_id, event_type, event_subtype, message_id, channel_id, part, source) VALUES
 | 
			
		||||
('$X16nfVks1wsrhq4E9SSLiqrf2N8KD0erD0scZG7U5xg', 'm.room.message', 'm.text', '1126786462646550579', '112760669178241024', 0, 1),
 | 
			
		||||
('$Ij3qo7NxMA4VPexlAiIx2CB9JbsiGhJeyt-2OvkAUe4', 'm.room.message', 'm.text', '1128118177155526666', '112760669178241024', 0, 0),
 | 
			
		||||
('$zXSlyI78DQqQwwfPUSzZ1b-nXzbUrCDljJgnGDdoI10', 'm.room.message', 'm.text', '1141619794500649020', '497161350934560778', 0, 1),
 | 
			
		||||
('$fdD9OZ55xg3EAsfvLZza5tMhtjUO91Wg3Otuo96TplY', 'm.room.message', 'm.text', '1141206225632112650', '160197704226439168', 0, 1),
 | 
			
		||||
('$mtR8cJqM4fKno1bVsm8F4wUVqSntt2sq6jav1lyavuA', 'm.room.message', 'm.text', '1141501302736695316', '112760669178241024', 0, 1),
 | 
			
		||||
('$51f4yqHinwnSbPEQ9dCgoyy4qiIJSX0QYYVUnvwyTCI', 'm.room.message', 'm.image', '1141501302736695316', '112760669178241024', 1, 1),
 | 
			
		||||
('$51f4yqHinwnSbPEQ9dCgoyy4qiIJSX0QYYVUnvwyTCJ', 'm.room.message', 'm.image', '1141501302736695317', '112760669178241024', 0, 1),
 | 
			
		||||
('$vgTKOR5ZTYNMKaS7XvgEIDaOWZtVCEyzLLi5Pc5Gz4M', 'm.room.message', 'm.text', '1128084851279536279', '112760669178241024', 0, 1),
 | 
			
		||||
('$YUJFa5j0ZJe7PUvD2DykRt9g51RoadUEYmuJLdSEbJ0', 'm.room.message', 'm.image', '1128084851279536279', '112760669178241024', 1, 1),
 | 
			
		||||
('$oLyUTyZ_7e_SUzGNWZKz880ll9amLZvXGbArJCKai2Q', 'm.room.message', 'm.text', '1128084748338741392', '112760669178241024', 0, 1),
 | 
			
		||||
('$FchUVylsOfmmbj-VwEs5Z9kY49_dt2zd0vWfylzy5Yo', 'm.room.message', 'm.text', '1143121514925928541', '1100319550446252084', 0, 1),
 | 
			
		||||
('$lnAF9IosAECTnlv9p2e18FG8rHn-JgYKHEHIh5qdFv4', 'm.room.message', 'm.text', '1106366167788044450', '122155380120748034', 0, 1),
 | 
			
		||||
('$Ijf1MFCD39ktrNHxrA-i2aKoRWNYdAV2ZXYQeiZIgEU', 'm.room.message', 'm.image', '1106366167788044450', '122155380120748034', 0, 0),
 | 
			
		||||
('$f9cjKiacXI9qPF_nUAckzbiKnJEi0LM399kOkhdd8f8', 'm.sticker', NULL, '1106366167788044450', '122155380120748034', 0, 0),
 | 
			
		||||
('$Fxy8SMoJuTduwReVkHZ1uHif9EuvNx36Hg79cltiA04', 'm.room.message', 'm.text', '1144865310588014633', '687028734322147344', 0, 1);
 | 
			
		||||
INSERT INTO message_channel (message_id, channel_id) VALUES
 | 
			
		||||
('1106366167788044450', '122155380120748034'),
 | 
			
		||||
('1126786462646550579', '112760669178241024'),
 | 
			
		||||
('1128084748338741392', '112760669178241024'),
 | 
			
		||||
('1128084851279536279', '112760669178241024'),
 | 
			
		||||
('1128118177155526666', '112760669178241024'),
 | 
			
		||||
('1141206225632112650', '160197704226439168'),
 | 
			
		||||
('1141501302736695316', '112760669178241024'),
 | 
			
		||||
('1141501302736695317', '112760669178241024'),
 | 
			
		||||
('1141619794500649020', '497161350934560778'),
 | 
			
		||||
('1143121514925928541', '1100319550446252084'),
 | 
			
		||||
('1144865310588014633', '687028734322147344');
 | 
			
		||||
 | 
			
		||||
INSERT INTO event_message (event_id, event_type, event_subtype, message_id, part, source) VALUES
 | 
			
		||||
('$X16nfVks1wsrhq4E9SSLiqrf2N8KD0erD0scZG7U5xg', 'm.room.message', 'm.text', '1126786462646550579', 0, 1),
 | 
			
		||||
('$Ij3qo7NxMA4VPexlAiIx2CB9JbsiGhJeyt-2OvkAUe4', 'm.room.message', 'm.text', '1128118177155526666', 0, 0),
 | 
			
		||||
('$zXSlyI78DQqQwwfPUSzZ1b-nXzbUrCDljJgnGDdoI10', 'm.room.message', 'm.text', '1141619794500649020', 0, 1),
 | 
			
		||||
('$fdD9OZ55xg3EAsfvLZza5tMhtjUO91Wg3Otuo96TplY', 'm.room.message', 'm.text', '1141206225632112650', 0, 1),
 | 
			
		||||
('$mtR8cJqM4fKno1bVsm8F4wUVqSntt2sq6jav1lyavuA', 'm.room.message', 'm.text', '1141501302736695316', 0, 1),
 | 
			
		||||
('$51f4yqHinwnSbPEQ9dCgoyy4qiIJSX0QYYVUnvwyTCI', 'm.room.message', 'm.image', '1141501302736695316', 1, 1),
 | 
			
		||||
('$51f4yqHinwnSbPEQ9dCgoyy4qiIJSX0QYYVUnvwyTCJ', 'm.room.message', 'm.image', '1141501302736695317', 0, 1),
 | 
			
		||||
('$vgTKOR5ZTYNMKaS7XvgEIDaOWZtVCEyzLLi5Pc5Gz4M', 'm.room.message', 'm.text', '1128084851279536279', 0, 1),
 | 
			
		||||
('$YUJFa5j0ZJe7PUvD2DykRt9g51RoadUEYmuJLdSEbJ0', 'm.room.message', 'm.image', '1128084851279536279', 1, 1),
 | 
			
		||||
('$oLyUTyZ_7e_SUzGNWZKz880ll9amLZvXGbArJCKai2Q', 'm.room.message', 'm.text', '1128084748338741392', 0, 1),
 | 
			
		||||
('$FchUVylsOfmmbj-VwEs5Z9kY49_dt2zd0vWfylzy5Yo', 'm.room.message', 'm.text', '1143121514925928541', 0, 1),
 | 
			
		||||
('$lnAF9IosAECTnlv9p2e18FG8rHn-JgYKHEHIh5qdFv4', 'm.room.message', 'm.text', '1106366167788044450', 0, 1),
 | 
			
		||||
('$Ijf1MFCD39ktrNHxrA-i2aKoRWNYdAV2ZXYQeiZIgEU', 'm.room.message', 'm.image', '1106366167788044450', 0, 0),
 | 
			
		||||
('$f9cjKiacXI9qPF_nUAckzbiKnJEi0LM399kOkhdd8f8', 'm.sticker', NULL, '1106366167788044450', 0, 0),
 | 
			
		||||
('$Fxy8SMoJuTduwReVkHZ1uHif9EuvNx36Hg79cltiA04', 'm.room.message', 'm.text', '1144865310588014633', 0, 1);
 | 
			
		||||
 | 
			
		||||
INSERT INTO file (discord_url, mxc_url) VALUES
 | 
			
		||||
('https://cdn.discordapp.com/attachments/497161332244742154/1124628646431297546/image.png', 'mxc://cadence.moe/qXoZktDqNtEGuOCZEADAMvhM'),
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue