Jump to content

Recommended Posts

Posted

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

Posted

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

Posted
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".

Posted

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

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

  • 2 weeks later...
Posted

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...

Posted

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;

"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Posted

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.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.