Ir para o conteúdo
MIMP

duvida na criaçao de base de dados....

Mensagens Recomendadas

MIMP    0
MIMP

boas....

estou a resolver uns exercicios das aulas...mas estou a ter dificuldade em criar a base de dados, pois dá-me erro ao meter a correr no mysql...

drop database if exists video_clube_xpto;
create database video_clube_xpto;
use video_clube_xpto;

create table modalidade (
cod_modalidade integer not null,
preco char(10),
multa char(10),
designacao char(20),

primary key (cod_modalidade));

create table aluguer(
multa char(5),
num_aluguer integer not null,
preco char(6),
data_aluguer date,
data_entrega date,
cod_modalidade integer not null,
num_socio integer not null,
cod_filme integer not null,
num_exemplar integer not null,

primary key (num_aluguer),

FOREIGN KEY (cod_modalidade)
REFERENCES modalidade (cod_modalidade)
ON UPDATE CASCADE
ON DELETE CASCADE,

FOREIGN KEY (num_socio)
REFERENCES socio (num_socio)
ON UPDATE CASCADE
ON DELETE CASCADE,

FOREIGN KEY (cod_filme)
REFERENCES filme (cod_filme)
ON UPDATE CASCADE
ON DELETE CASCADE,

FOREIGN KEY (num_exemplar)
REFERENCES exemplar (num_exemplar)
ON UPDATE CASCADE
ON DELETE CASCADE);


create table exemplar(
num_exemplar integer not null,
preco char(6),
data_aquisicao date,
formato char(5),
cod_filme integer not null,

primary key (num_exemplar,cod_filme),


FOREIGN KEY (cod_filme)
REFERENCES filme (cod_filme)
ON UPDATE CASCADE
ON DELETE CASCADE);

create table filme(
cod_filme integer not null,
duracao char(10),
titulo char(10),

primary key (cod_filme));

create table socio(
num_socio integer not null,
nome char(20),
morada char(20),
telefone integer,
bi integer,
data_nasc date,
data_insc date,

primary key (num_socio));

espero k me possam ajudar....

obrg

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
MIMP    0
MIMP

o erro k me dá é este:

"error 1005 (HY000): Can't create table 'video_clube_xpto.aluguer' (errno:150)"

este erro aparece tambem para a tabela exemplar

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Baderous    31
Baderous
Se o MySQL retornar o erro de número 1005 de uma instrução CREATE TABLE, e a string de mensagem de erro se referir ao errno 150, então a criação da tabela falhou porque um restrição de chaves estrangeiras não foi formada corretamente

http://dev.mysql.com/doc/refman/4.1/pt/innodb-foreign-key-constraints.html

Penso que é porque estás a referenciar tabelas que ainda não foram criadas, aquando da definição das chaves estrangeiras na tabela "aluguer".

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
M6    80
M6

As tabelas têm uma ordem de criação, tens de colocar as que vão ser referenciadas antes das que as referenciam.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
MIMP    0
MIMP

As tabelas ja funcionam sem nenhum erro (Obrigados...)

DROP DATABASE IF EXISTS fichaF; 
CREATE DATABASE fichaF;
USE fichaF;

CREATE TABLE socios (
n_socio		              INTEGER(5) NOT NULL, 
nome		  			  CHAR(30) NOT NULL,
morada		      		  VARCHAR(30),
telefone 				  INTEGER (9),
bi 						  INTEGER (9),
data_nasc 				  DATE,
data_insc 				  DATE NOT NULL,

CONSTRAINT ch_candidata_socios UNIQUE (nome,bi),

CONSTRAINT ch_prim_n_socio
	PRIMARY KEY (n_socio)
);

CREATE TABLE filmes (
cod_filme		              INTEGER(5) NOT NULL,
titulo		  				  CHAR(30) NOT NULL,
duracao		     			  TIME,

CONSTRAINT ch_candidata_filmes UNIQUE (titulo),

CONSTRAINT ch_prim_cod_filme
	PRIMARY KEY (cod_filme)
);

CREATE TABLE modalidades (
modalidade		  CHAR(10) NOT NULL,
preco		      DECIMAL(5,2) NOT NULL,
multa_diaria	  DECIMAL(5,2) NOT NULL,

CHECK (preco >=0),
CHECK (multa_diaria >=0),

CONSTRAINT ch_prim_modalidade
	PRIMARY KEY (modalidade)
);

CREATE TABLE copias (
cod_filme	  	 INTEGER(5) NOT NULL,
n_copia		  	 INTEGER(5) NOT NULL,
formato      	 CHAR(3)NOT NULL,
data_aquisicao   DATE, 
preco	  		 DECIMAL(5,2) NOT NULL,

CHECK (formato= 'VHS' AND formato='DVD'),
CHECK (preco>=0),


CONSTRAINT ch_prim_cod_filme_e_n_copia
	PRIMARY KEY (cod_filme,n_copia)
);


CREATE TABLE alugueres (
n_aluguer		      INTEGER(5) NOT NULL,
n_socio		          INTEGER(5) NOT NULL,
cod_filme             INTEGER(5) NOT NULL,
n_copia	              INTEGER(5) NOT NULL,
modalidade		      CHAR(10) NOT NULL,
data_aluguer	      DATE,
data_entrega          DATE,
preco           	  DECIMAL(5,2) NOT NULL,
multa                 DECIMAL (5,2),

CHECK (multa >=0 OR NULL),
CHECK (preco >=0),


CONSTRAINT ch_prim_n_aluguer
	PRIMARY KEY (n_aluguer),

	CONSTRAINT ch_estr_n_socio 
	FOREIGN KEY (n_socio)
	REFERENCES socios (n_socio)
	ON UPDATE CASCADE  
	ON DELETE CASCADE, 

	CONSTRAINT ch_estr_cod_filme 
	FOREIGN KEY (cod_filme,n_copia)
	REFERENCES copias (cod_filme,n_copia) 
	ON UPDATE CASCADE
	ON DELETE CASCADE,

	CONSTRAINT ch_estr_modalidade
	FOREIGN KEY (modalidade)
	REFERENCES modalidades (modalidade)
	ON UPDATE CASCADE 
	ON DELETE CASCADE
);

Agora queria k me ajudassem no seguinte:

tenho k definir uma query em k para cada filme (cod_filme,titulo) tenho de listar o numero de cassetes existentes no clube.

so consego definir a query apenas a contar os filmes com copias em cassetess ('VHS'). Nao consigo colocar a 0 (zero) os 'DVD'.

select  f.cod_filme,titulo,count(*)
from filmes f, copias c
where formato='VHS' and f.cod_filme=c.cod_filme
group by cod_filme;

Obrigado...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Betovsky    2
Betovsky

Não percebi. Queres algo tipo

SELECT  f.cod_filme,titulo,count(*), 0
        FROM filmes f, copias c
        WHERE formato='VHS' AND f.cod_filme=c.cod_filme
        GROUP BY cod_filme;

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
falco    33
falco

Já agora lembra-te que por omissão o MySQL cria tabelas MyISAM... As tabelas MyISAM, não suportam chaves estrangeiras... Se queres utilizar chaves estrangeiras sugiro que uses tabelas InnoDB.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade