Ir para conteúdo
Fórum Script Brasil
  • 0

Representar tabela de fila de exibição do netflix


ricardo99

Pergunta

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

Editado por ricardo99
Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...