Gérer des ventes
On souhaite formaliser le modèle d'un site de partage de vidéo nommé CassTube, les utilisateurs possèdent un login unique, ainsi que leur nom et leur prenom. Les vidéos possèdent un id, un nom et une description. Un utilisateur possède plusieurs vidéos, et les vidéos possèdent des commentaires de plusieurs utilisateurs.
Nous souhaitons rechercher une liste des vidéos, ainsi que les vidéos par utilisateur. Enfin, nous chercherons aussi à récupérer les commentaires d'une vidéo ou les commentaires d'un utilisateurs
Question
Proposer une modélisation normalisée.
Question
Lancer la console CQL.
Sous Windows, pour pouvoir faire des copier coller, lancer la console via l'invite de commande.
Question
Créer un keyspace ai07
CREATE KEYSPACE ai07 WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };
Question
Créer les column family nécessaire.
Pour faciliter les exercices suivant, nous allons aussi créer une table user qui ne contiendra que le login, nom et prénom des utilisateurs créés.
Ne pas oublier de se placer dans le keyspace ai07
USE AI07;
CREATE TABLE <table> {
champs1 type,
champs2 type,
....
PRIMARY KEY(champs1)
} ;
videos
CREATE TABLE videos (
video_id uuid,
video_name varchar,
video_uploaded timestamp,
user_login varchar,
PRIMARY KEY(video_id));
videos_by_user
CREATE TABLE user_videos_index (
login varchar,
video_id uuid,
video_name varchar,
PRIMARY KEY(login, video_id));
comments_by_videos
CREATE TABLE comments_by_video (
video_id uuid,
user_login varchar,
comment_dat timestamp,
comment varchar,
PRIMARY KEY(video_id, user_login));
comments_by_user
CREATE TABLE comments_by_user (
user_login varchar,
video_id uuid,
comment_dat timestamp,
comment varchar,
PRIMARY KEY(user_login, video_id));
user
CREATE TABLE users (
login varchar,
firstname varchar,
lastname varchar,
PRIMARY KEY(login));
Question
insérer les videos suivantes et vérifier que l'insertion est correcte.
id (example) - video_name - video_uploaded - login
1 - KeyboardCat - now - cschmidt (Chris Schmidt)
2 - NyanCat - now - saraj00n (Sarah June)
Ajouter ensuite l'utilisateur suivant (sans vidéo) : MasterTroll (Jean Fabrice)
Vérifier l'insertion dans la table vidéo, puis recherchez les vidéos de l'utilisateur 'saraj00n'.
INSERT INTO <table>(<colonnes....>) VALUES (<Valeurs...>);
N'oubliez pas d'insérer les vidéos dans la table d'index !
Pour générer un UUID, utilisez uuid()
Pour récupérer la date actuelle, utilisez dateof(now))
INSERT INTO users(login, firstname, lastname) VALUES ('cschmidt', 'chris', 'SCHMIDT');
INSERT INTO users(login, firstname, lastname) VALUES ('saraj00n', 'Sarah', 'JUNE');
INSERT INTO users(login, firstname, lastname) VALUES ('MasterTroll', 'Jean', 'FABRICE');
INSERT INTO videos (video_id, video_name, video_uploaded, user_login) VALUES (uuid(),'Keyboard Cat', dateof(now()), 'cshmidt');
INSERT INTO user_videos_index (login, video_id, video_name) VALUES ('cschmidt', the generated uuid, 'Keyboard Cat');
INSERT INTO videos (video_id, video_name, video_uploaded, user_login) VALUES (uuid(),'nyan cat', dateof(now()), 'saraj00n');
INSERT INTO user_videos_index (login, video_id, video_name) VALUES ('saraj00n', the generated uuid, 'nyan cat');
SELECT * FROM videos;
SELECT video_name FROM user_videos_index WHERE login='saraj00n';
Question
Insérer le commentaires suivants :
1 - le 15/01/2017 à 12h00, saraj00n a écrit 'first' sur la vidéo 'Keyboard Cat'
2 - le 15/01/2017 à 12h05, MasterTroll a écrit 'thats lame' sur la vidéo 'Keyboard Cat'
Utilisez le format de date epoch.
INSERT INTO comments_by_user (user_login, video_id, comment_dat, comment) VALUES (saraj00n, generated uuid, '1484481600', 'first');
INSERT INTO comments_by_videos (video_id, user_login, comment_dat, comment) VALUES (generated uuid, saraj00n, '1484481600', 'first');
INSERT INTO comments_by_user (user_login, video_id, comment_dat, comment) VALUES (MasterTroll, generated uuid, '1484481900', 'thats lame');
INSERT INTO comments_by_videos (video_id, user_login, comment_dat, comment) VALUES (generated uuid, 'MasterTroll', 1484481900, 'thats lame');
SELECT * FROM comments_by_user;
SELECT * FROM comments_by_video;
Question
Insérer cet utilisateur :
INSERT INTO users (client_id , nom, prenom , age) VALUES ('saraj00n', 'Sarah', 'Junior');
Que se passe-t-il ?
L'utilisateur saraj00n existait déjà (Sarah Junior). L'insert ne renvoie pas d'erreur mais fait un update de la ligne.
Question
Question
Question
Supprimez la column family users.
drop table users;
Question
Supprimer le keyspace.
DROP KEYSPACE ai07;