2013-11-29 4 views
0

Я хотел создать таблицу даты (данные на португальском языке), у меня был уникальный атрибут перед dia (день), mes (месяц) и ano (год), но я решил удалить их, так как это не имеет смысла, потому что может быть много дней «25» и много «Januarys» в таблице, но, как я снял «уникальный» атрибут я получил следующие ошибкиОшибка создания таблицы MySQL

ERROR 1005 (HY000): Не удается создать таблицу ist169515.Disponivel (errno: 150)
ОШИБКА 1005 (HY000): Не удается создать таблицу 'ist169515.Venda' (errno: 150)
Query OK, 0 (0,07 с)
ОШИБКА 1 005 (HY000): Невозможно создать таблицу 'ist169515.Encomenda' (ошибка: 150)
ERROR 1005 (HY000): Невозможно создать таблицу 'ist169515.RegistoEnc' (ошибка: 150)

полный код выглядит следующим образом:

create table Alimento 
    (nomeA varchar(80) not null unique, 
    vegetariano boolean not null, 
    PRIMARY KEY(nomeA)); 

create table Simples 
     (nomeA varchar(80) not null, 
    calgramas numeric(5,2) not null, 
    tipo varchar(255) not null, 
    PRIMARY KEY(nomeA), 
    FOREIGN KEY(nomeA) REFERENCES Alimento(nomeA)); 


create table Agregado 
     (nomeA varchar(80) not null, 
    calorias numeric(5,2) not null, 
    PRIMARY KEY(nomeA), 
    FOREIGN KEY(nomeA) REFERENCES Alimento(nomeA)); 

create table Composto 
    (nomeAgg varchar(80) not null unique, 
    nomeS varchar (80) not null unique, 
    quantidade numeric(4), 
    PRIMARY KEY(nomeAgg, nomeS), 
    FOREIGN KEY(nomeAgg) REFERENCES Agregado(nomeA), 
    FOREIGN KEY(nomeS) REFERENCES Simples(nomeA)); 

create table Prato 
    (nomeA varchar(80) not null, 
    preco numeric(5,2) not null, 
    PRIMARY KEY(nomeA), 
    FOREIGN KEY(nomeA) REFERENCES Alimento(nomeA)); 

create table Restaurante 
    (nomeR varchar(80) not null unique, 
     PRIMARY KEY(nomeR)); 

create table Data 
    (dia numeric(2) not null, 
    mes varchar(45) not null, 
    ano numeric(4) not null, 
    PRIMARY KEY(dia, mes, ano)); 

create table Disponivel 
    (nomeA varchar(80) not null, 
    nomeR varchar(80) not null, 
    dia numeric(2) not null, 
    mes varchar(45) not null, 
    ano numeric(4) not null, 
    PRIMARY KEY(nomeA, nomeR, dia, mes, ano), 
    FOREIGN KEY(nomeA) REFERENCES Prato(nomeA), 
    FOREIGN KEY(nomeR) REFERENCES Restaurante(nomeR), 
    FOREIGN KEY(dia) REFERENCES Data(dia), 
    FOREIGN KEY(mes) REFERENCES Data(mes), 
    FOREIGN KEY(ano) REFERENCES Data(ano)); 

create table Venda 
    (nomeA varchar(80) not null, 
    dia numeric(2) not null, 
    mes varchar(45) not null, 
    ano numeric(4) not null, 
    nomeR varchar(80) not null, 
    num numeric(5) not null, 
    PRIMARY KEY(nomeA, dia, mes, ano, nomeR), 
    FOREIGN KEY(nomeA) REFERENCES Prato(nomeA), 
    FOREIGN KEY(dia) REFERENCES Data(dia), 
    FOREIGN KEY(mes) REFERENCES Data(mes), 
    FOREIGN KEY(ano) REFERENCES Data(ano), 
    FOREIGN KEY(nomeR) REFERENCES Restaurante(nomeR)); 

create table Cliente 
    (email varchar(255) not null unique, 
    PRIMARY KEY Cliente(email)); 

create table Encomenda 
    (email varchar(255) not null, 
    nEnc numeric(5) not null unique, 
    precoTotal numeric(5,2) not null, 
    desconto double(20,2) not null, 
    nomeR varchar(80) not null, 
    dia numeric(2) not null, 
    mes varchar(45) not null, 
    ano numeric(4) not null, 
    PRIMARY KEY(email, nEnc), 
    FOREIGN KEY(email) REFERENCES Cliente(email), 
    FOREIGN KEY(nomeR) REFERENCES Restaurante(nomeR), 
    FOREIGN KEY(dia) REFERENCES Data(dia), 
    FOREIGN KEY(mes) REFERENCES Data(mes), 
    FOREIGN KEY(ano) REFERENCES Data(ano)); 

    create table RegistoEnc 
    (email varchar(255) not null, 
    nEnc numeric(5) not null, 
    nomeA varchar(80) not null, 
    PRIMARY KEY(email, nEnc, nomeA), 
    FOREIGN KEY(email) REFERENCES Encomenda(email), 
    FOREIGN KEY(nEnc) REFERENCES Encomenda(nEnc), 
    FOREIGN KEY(nomeA) REFERENCES Prato(nomeA)); 
+0

Существуют ли таблицы «Прато» и «Ресторан»? –

+0

да, да, я просто ссылаюсь на таблицы, которые дают проблемы, поставит полный код – devilzzord

+0

http://stackoverflow.com/questions/1457305/mysql-creating-tables-with-foreign-keys-giving-errno-150 – ryan0319

ответ

0

EDIT:

FOREIGN KEY(dia, mes, ano) REFERENCES Data(dia, mes, ano) 

вместо

FOREIGN KEY(dia) REFERENCES Data(dia), 
FOREIGN KEY(mes) REFERENCES Data(mes), 
FOREIGN KEY(ano) REFERENCES Data(ano), 
+0

Нет, я опустил старую базу данных, создав новую, чтобы быть уверенным, и это дает мне эту ошибку – devilzzord

+0

Исправлено! это был тот синтаксис, который я думаю, большое спасибо! – devilzzord

+0

Это был внешний ключ, который не представлял то же самое, что и первичный ключ. Комбинация 3 (dia, mes, ano) является первичным ключом, вы указываете их отдельно. Ура! – ryan0319

Смежные вопросы