Jump to content
Fórum Script Brasil
  • 0

Representar tabela de fila de exibição do netflix


ricardo99
 Share

Question

Olá, bem estou criando uma aplicação que irá utilizar massivamente o banco de dados, o mesmo irá conter um total de 3 Tabelas representando Usuarios, Videos e Tags (Humor,terror) e 1 tabela representando uma fila de videos a serem reproduzidos pelo usuário e 1 Tabela contendo a quais tags cada filme pertence (Ex: Filme A possui a Tag Terror e Suspense, Filme B pertence a Tag Suspense) estou com dificuldades para representar as tabela com economia de recursos, abaixo as tabelas que criei.

CREATE TABLE usuarios(
id INTEGER NOT NULL AUTO_INCREMENT,
email VARCHAR(50),
login VARCHAR(20),
pass VARCHAR(40),
PRIMARY KEY(id));
CREATE TABLE videos(
id INTEGER NOT NULL AUTO_INCREMENT,
title VARCHAR(60),
urlvideo VARCHAR(200),
urlthumb VARCHAR(200),
dateupload DATE,
duration INTEGER(3),
PRIMARY KEY(id));
CREATE TABLE lista(
id INTEGER NOT NULL AUTO_INCREMENT,
id_usuario id INTEGER NOT NULL,
id_video INTEGER NOT NULL,
PRIMARY KEY(id));
CREATE TABLE tags(
id INTEGER NOT NULL AUTO_INCREMENT,
tag_name VARCHAR(40),
PRIMARY KEY(id));
Não consegui imaginar uma tabela que pude-se representar o relaciomento entre tags e videos

Edited by ricardo99
Link to comment
Share on other sites

9 answers to this question

Recommended Posts

  • 0

Usuarios pode assistir muitos vídeos.

Um videos pode ser assistido por muitos usuários.

Assim, o relacionamento entre videos e usuários é muitos para muitos.

Uma tabela de relacionamento usuário x video será escrita como abaixo:

CREATE TABLE rlUsuario_video(

id_usuario INTEGER NOT NULL,

id_video INTEGER NOT NULL,

dt_video_assistido date

PRIMARY KEY(id_usuario, id_video)

);

Não consegui imaginar uma tabela que pude-se representar o relaciomento entre tags e videos

A mesma regra vale para o relacionamento entre videos e tags
Link to comment
Share on other sites

  • 0

Da mesma forma que você faria para definir uma sql com a tabela lista ligando usuarios a videos

Conforme o esquema anexo, observe o sql abaixo:

SELECT nmTAG, nmVideo 
FROM video v
INNER JOIN RLVideoTags vt ON vt.idVideo = v.idVideo
INNER JOIN Tags t ON t.idTag = vt.idTag
ORDER BY nmTag, nmVideo
Será exibida uma lista de videos ordenados por suas TAGs.

Outra forma seria:

SELECT nmVideo GROUP_CONCAT(nmTAG)
FROM video v
INNER JOIN RLVideoTags vt ON vt.idVideo = v.idVideo
INNER JOIN Tags t ON t.idTag = vt.idTag
GROUP BY nmVideo
Seria uma lista de vídeos com suas tags em uma mesma linha

netflix.pdf

Link to comment
Share on other sites

  • 0

Você fará normalmente como em qualquer outra tabela com cabeçalho e item. (nota fiscal é um bom examplo)

Em sua aplicação, no cadastro de vídeo, você colocará as tags que este video pertence.

Na mesma transação de gravação dos dados do vídeo, você gravará os dados das tags

O algorítimo seria pareciado com o abaixo:

(normalmente eu realizo operações deste tipo através de STORAGE PROCEDURE, pois se abortar em algum ponto, nada é gravado.

DELIMITER $$;

DROP PROCEDURE IF EXISTS `sase`.`video_crud`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `video_crud`(IN pnmTituloVideo VARCHAR(50), IN pdsURLVideo VARCHAR(50), IN purlthumb VARCHAR(50), 
   IN pdtUpLoad DATE, IN pduracaoDoVideo INTEGER, IN pdsTAGs VARCHAR(2000))
BEGIN
   DECLARE strInicial VARCHAR(4000);
   DECLARE strCampos  VARCHAR(4000);
   DECLARE campo      VARCHAR(255);
   DECLARE pidTAG     INTEGER;
   DECLARE excessao SMALLINT DEFAULT 0;
   DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET excessao = 1;
   
   IF {Aqui entra critica de validação de dados} THEN
      SELECT "Erro na passagem de parametros" AS Msg;
   ELSE
      START TRANSACTION;
      /*Inclusao de Video*/
      IF excessao = 0 THEN
         INSERT INTO video(nmTituloVideo, dsURLVideo, urlthumb, dtUpLoad, duracaoDoVideo)
            VALUES(pnmTituloVideo, pdsURLVideo, purlthumb, pdtUpLoad, pduracaoDoVideo);
         IF excessao = 1 THEN
            SELECT "Erro ao inserir na tabela video" AS Msg;
            ROLLBACK;
         ELSE
            SELECT DISTINCT LAST_INSERT_ID() INTO @idVideo FROM video; /* vai pegar o ID do vídeo que acabou de inserir */
            IF excessao = 1 THEN
               SELECT "Erro ao buscar ultimo ID de video" AS Msg;
               ROLLBACK;
            END IF;
         END IF;
      END IF;
   
      /*Grava TAGs de usuario*/
      IF excessao = 0 THEN
         SET strCampos = pdsTAGs;
         WHILE LOCATE(",", strCampos) <> 0  AND excessao <> 1 DO
            SET campo = SUBSTRING(strCampos, 1, LOCATE(",", strCampos)-1);
			SELECT idTAG INTO pidTAG FROM tags WHERE nmTAG = campo;
            INSERT INTO TAG(codigo, idUsuario, MODULO) VALUES (@idVideo, pidTAG);
            IF excessao = 1 THEN
               SELECT "Erro ao gravar RLVideoTAGs (1) " AS Msg;
               ROLLBACK;
            ELSE
               SET strCampos = SUBSTRING(strCampos, LOCATE(",", strCampos)+1, length(strCampos)-length(LOCATE(",", strCampos)));
            END IF;
         END WHILE;
         IF excessao = 0 THEN 
            SELECT idTAG INTO pidTAG FROM tags WHERE nmTAG = campo;
            INSERT INTO TAG(codigo, idUsuario, MODULO) VALUES (@idVideo, pidTAG);
            IF excessao = 1 THEN
               SELECT "Erro ao gravar RLVideoTAGs (2) " AS Msg;
               ROLLBACK;
            END IF;
         END IF;
      END IF;
      /*Se tudo deu certo, ent?o finaliza confirmando a grava??o.*/
      IF excessao = 0 THEN
         COMMIT;
         SELECT "Video Incluido com sucesso" as msg;
      END IF;
   END IF;
END$$

DELIMITER ;$$
Link to comment
Share on other sites

  • 0
On 12/29/2014 at 8:09 PM, Denis Courcy said:

Você fará normalmente como em qualquer outra tabela com cabeçalho e item. (nota fiscal é um bom examplo)

Em sua aplicação, no cadastro de vídeo, você colocará as tags que este video pertence.

Na mesma transação de gravação dos dados do vídeo, você gravará os dados das tags

O algorítimo seria pareciado com o abaixo:

(normalmente eu realizo operações deste tipo através de STORAGE PROCEDURE, pois se abortar em algum ponto, nada é gravado.

 

DELIMITER $$;

DROP PROCEDURE IF EXISTS `sase`.`video_crud`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `video_crud`(IN pnmTituloVideo VARCHAR(50), IN pdsURLVideo VARCHAR(50), IN purlthumb VARCHAR(50), 
   IN pdtUpLoad DATE, IN pduracaoDoVideo INTEGER, IN pdsTAGs VARCHAR(2000))
BEGIN
   DECLARE strInicial VARCHAR(4000);
   DECLARE strCampos  VARCHAR(4000);
   DECLARE campo      VARCHAR(255);
   DECLARE pidTAG     INTEGER;
   DECLARE excessao SMALLINT DEFAULT 0;
   DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET excessao = 1;
   
   IF {Aqui entra critica de validação de dados} THEN
      SELECT "Erro na passagem de parametros" AS Msg;
   ELSE
      START TRANSACTION;
      /*Inclusao de Video*/
      IF excessao = 0 THEN
         INSERT INTO video(nmTituloVideo, dsURLVideo, urlthumb, dtUpLoad, duracaoDoVideo)
            VALUES(pnmTituloVideo, pdsURLVideo, purlthumb, pdtUpLoad, pduracaoDoVideo);
         IF excessao = 1 THEN
            SELECT "Erro ao inserir na tabela video" AS Msg;
            ROLLBACK;
         ELSE
            SELECT DISTINCT LAST_INSERT_ID() INTO @idVideo FROM video; /* vai pegar o ID do vídeo que acabou de inserir */
            IF excessao = 1 THEN
               SELECT "Erro ao buscar ultimo ID de video" AS Msg;
               ROLLBACK;
            END IF;
         END IF;
      END IF;
   
      /*Grava TAGs de usuario*/
      IF excessao = 0 THEN
         SET strCampos = pdsTAGs;
         WHILE LOCATE(",", strCampos) <> 0  AND excessao <> 1 DO
            SET campo = SUBSTRING(strCampos, 1, LOCATE(",", strCampos)-1);
			SELECT idTAG INTO pidTAG FROM tags WHERE nmTAG = campo;
            INSERT INTO TAG(codigo, idUsuario, MODULO) VALUES (@idVideo, pidTAG);
            IF excessao = 1 THEN
               SELECT "Erro ao gravar RLVideoTAGs (1) " AS Msg;
               ROLLBACK;
            ELSE
               SET strCampos = SUBSTRING(strCampos, LOCATE(",", strCampos)+1, length(strCampos)-length(LOCATE(",", strCampos)));
            END IF;
         END WHILE;
         IF excessao = 0 THEN 
            SELECT idTAG INTO pidTAG FROM tags WHERE nmTAG = campo;
            INSERT INTO TAG(codigo, idUsuario, MODULO) VALUES (@idVideo, pidTAG);
            IF excessao = 1 THEN
               SELECT "Erro ao gravar RLVideoTAGs (2) " AS Msg;
               ROLLBACK;
            END IF;
         END IF;
      END IF;
      /*Se tudo deu certo, ent?o finaliza confirmando a grava??o.*/
      IF excessao = 0 THEN
         COMMIT;
         SELECT "Video Incluido com sucesso" as msg;
      END IF;
   END IF;
END$$

DELIMITER ;$$

Thanks for sharing this, it was helpful. Also share table format for COC MOD Apk.

.

Edited by Ana Watson
no
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.2k
×
×
  • Create New...