mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			86 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			SQL
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			SQL
		
	
	
	
	
	
| CREATE KEYSPACE videodb WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };
 | |
| 
 | |
| use videodb;
 | |
| 
 | |
| // Basic entity table
 | |
| // Object mapping ?
 | |
| CREATE TABLE users (
 | |
|    username varchar,
 | |
|    firstname varchar,
 | |
|    lastname varchar,
 | |
|    email varchar,
 | |
|    password varchar,
 | |
|    created_date timestamp,
 | |
|    total_credits int,
 | |
|    credit_change_date timeuuid,
 | |
|    PRIMARY KEY (username)
 | |
| );
 | |
| 
 | |
| // One-to-many entity table
 | |
| CREATE TABLE videos (
 | |
|    videoid uuid,
 | |
|    videoname varchar,
 | |
|    username varchar,
 | |
|    description varchar, 
 | |
|    tags list<varchar>,
 | |
|    upload_date timestamp,
 | |
|    PRIMARY KEY (videoid)
 | |
| );
 | |
| 
 | |
| // One-to-many from the user point of view
 | |
| // Also know as a lookup table
 | |
| CREATE TABLE username_video_index (
 | |
|    username varchar,
 | |
|    videoid uuid,
 | |
|    upload_date timestamp,
 | |
|    videoname varchar,
 | |
|    PRIMARY KEY (username, videoid)
 | |
| );
 | |
| 
 | |
| // Counter table
 | |
| CREATE TABLE video_rating (
 | |
|    videoid uuid,
 | |
|    rating_counter counter,
 | |
|    rating_total counter,
 | |
|    PRIMARY KEY (videoid)
 | |
| );
 | |
| 
 | |
| // Creating index tables for tab keywords
 | |
| CREATE TABLE tag_index (
 | |
|    tag varchar, 
 | |
|    videoid uuid,
 | |
|    timestamp timestamp,
 | |
|    PRIMARY KEY (tag, videoid)
 | |
| );
 | |
| 
 | |
| // Comments as a many-to-many 
 | |
| // Looking from the video side to many users
 | |
| CREATE TABLE comments_by_video (
 | |
|    videoid uuid,
 | |
|    username varchar,
 | |
|    comment_ts timestamp,
 | |
|    comment varchar,
 | |
|    PRIMARY KEY (videoid,comment_ts,username)
 | |
| ) WITH CLUSTERING ORDER BY (comment_ts DESC, username ASC);
 | |
| 
 | |
| // looking from the user side to many videos
 | |
| CREATE TABLE comments_by_user (
 | |
|    username varchar,
 | |
|    videoid uuid,
 | |
|    comment_ts timestamp,
 | |
|    comment varchar,
 | |
|    PRIMARY KEY (username,comment_ts,videoid)
 | |
| ) WITH CLUSTERING ORDER BY (comment_ts DESC, videoid ASC);
 | |
| 
 | |
| 
 | |
| // Time series wide row with reverse comparator
 | |
| CREATE TABLE video_event (
 | |
|    videoid uuid,
 | |
|    username varchar,
 | |
|    event varchar,
 | |
|    event_timestamp timeuuid,
 | |
|    video_timestamp bigint,
 | |
|    PRIMARY KEY ((videoid,username), event_timestamp,event)
 | |
| ) WITH CLUSTERING ORDER BY (event_timestamp DESC,event ASC);
 | |
| 
 |