Dúvida sobre Banco de Dados
20/03/2023
0
Segue o Código abaixo:
def update(): match txt: case "Código": # Código fazTipo() fazData() comando = f''UPDATE ingresso SET'' \ f'' cod = "{codigo.get()}",'' \ f'' WHERE cod = "{int(Descricao.get())}"'' cursor.execute(comando) conexao.commit() ## <<<< editar o banco de dados novaReservaMsgmLabel.configure(text=f''Dados atualizados com sucesso: '' \ f''\n\nAssento: {assento.get()}'' \ f''\nValor: R${valor.get()}'' \ f''\nNome: {nome.get()}'' \ f''\nSala: {sala.get()}'' \ f''\nTipo: '' \ f''\n\n=======Adcionado======='' \ f''\nData:'' \ f''\nHora:'' \ f''\n======================='') return 0 case "Nome": # Nome fazTipo() fazData() comando = f''UPDATE ingresso SET'' \ f'' nome = "{nome.get()}",''\ f'' sala_sala = "{sala.get()}",'' \ f'' sala_assento = "{assento.get()}",'' \ f'' WHERE nome = "{Descricao.get()}" \ AND sala_sala = "{DescricaoParaSala.get()}"\ AND assento_assento = "{DescricaoParaAssento.get()}"'' print(comando) cursor.execute(comando) conexao.commit() ## <<<< editar o banco de dados novaReservaMsgmLabel.configure(text=f''Dados atualizados com sucesso: '' \ f''\n\nAssento: {assento.get()}'' \ f''\nValor: R${valor.get()}'' \ f''\nNome: {nome.get()}'' \ f''\nSala: {sala.get()}'' \ f''\nTipo: '' \ f''\n\n=======Adcionado======='' \ f''\nData:'' \ f''\nHora:'' \ f''\n======================='') return 0 case "Sala": # Sala fazTipo() fazData() comando = f''UPDATE sala SET'' \ f'' sala = "{sala.get()}",'' \ f'' WHERE sala = "{Descricao.get()}"'' print(comando) cursor.execute(comando) conexao.commit() ## <<<< editar o banco de dados novaReservaMsgmLabel.configure(text=f''Dados atualizados com sucesso: '' \ f''\n\nAssento: {assento.get()}'' \ f''\nValor: R${valor.get()}'' \ f''\nNome: {nome.get()}'' \ f''\nSala: {sala.get()}'' \ f''\nTipo: '' \ f''\n\n=======Adcionado======='' \ f''\nData:'' \ f''\nHora:'' \ f''\n======================='') return 0 case "Assento": #Assento fazTipo() fazData() comando = f''UPDATE assento SET'' \ f'' assento = "{assento.get()}",'' \ f'' WHERE assento = "{Descricao.get()}"'' cursor.execute(comando) conexao.commit() ## <<<< editar o banco de dados novaReservaMsgmLabel.configure(text=f''Dados atualizados com sucesso: '' \ f''\n\nAssento: {assento.get()}'' \ f''\nValor: R${valor.get()}'' \ f''\nNome: {nome.get()}'' \ f''\nSala: {sala.get()}'' \ f''\nTipo: '' \ f''\n\n=======Adcionado======='' \ f''\nData:'' \ f''\nHora:'' \ f''\n======================='') return 0 case _: novaReservaMsgmLabel.configure(text=f''Opção : --> {Descricao.get()} <--\nnão é válida.\nPor favor confira a escolha \ne \ntente novamente.'') return 0
Segue o Banco de Dados (MySQL):
-- MySQL Script generated by MySQL Workbench -- Mon Mar 20 15:10:46 2023 -- Model: New Model Version: 1.0 -- MySQL Workbench Forward Engineering SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE=''ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION''; -- ----------------------------------------------------- -- Schema mydb -- ----------------------------------------------------- -- ----------------------------------------------------- -- Schema mydb -- ----------------------------------------------------- CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 ; USE `mydb` ; -- ----------------------------------------------------- -- Table `mydb`.`assento` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `mydb`.`assento` ( `assento` VARCHAR(45) NOT NULL, PRIMARY KEY (`assento`)) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `mydb`.`sala` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `mydb`.`sala` ( `sala` INT NOT NULL, `assento_assento` VARCHAR(45) NOT NULL, PRIMARY KEY (`sala`), INDEX `fk_sala_assento1_idx` (`assento_assento` ASC) VISIBLE, CONSTRAINT `fk_sala_assento1` FOREIGN KEY (`assento_assento`) REFERENCES `mydb`.`assento` (`assento`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `mydb`.`ingresso` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `mydb`.`ingresso` ( `cod` INT NOT NULL AUTO_INCREMENT, `nome` VARCHAR(45) NOT NULL, `valor` DECIMAL(5,0) NULL, `tipo_entrada` VARCHAR(45) NULL, `data` DATE NULL, `hora` TIME NULL, `sala_sala` INT NOT NULL, `assento_assento` VARCHAR(45) NOT NULL, PRIMARY KEY (`cod`, `sala_sala`, `assento_assento`), INDEX `fk_ingresso_sala1_idx` (`sala_sala` ASC) VISIBLE, INDEX `fk_ingresso_assento1_idx` (`assento_assento` ASC) VISIBLE, CONSTRAINT `fk_ingresso_sala1` FOREIGN KEY (`sala_sala`) REFERENCES `mydb`.`sala` (`sala`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_ingresso_assento
Felipe
Posts
20/03/2023
Felipe
FOREIGN KEY (`assento_assento`) REFERENCES `mydb`.`assento` (`assento`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; SET SQL_MODE=@OLD_SQL_MODE; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
20/03/2023
Arthur Heinrich
Uma sala pode conter vários assentos. Logo, é o assento que faz referência à sala e não o contrário.
Pense sempre na relação "1 para n". O "1" é representado pela tabela que possui a PK, que garante a unicidade.
O "n" indica que, para uma mesma chave, neste caso, a PK da sala, pode aparecer em múltiplos registros de assento que compõe a sala.
No seu modelo, invertido. A sala faz referência a um único assento. Para cadastrar a sala, o assento precisa ser criado com antecedência, o que não faz sentido.
20/03/2023
Felipe
Clique aqui para fazer login e interagir na Comunidade :)