1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Problema com query SQL errno: 150

Discussão em 'Web Development' iniciada por The Dealer, 22 de Março de 2009. (Respostas: 3; Visualizações: 2211)

  1. The Dealer

    The Dealer Power Member

    Alguem me sabe dizer porque é que me dá erro a criar a tabela Notas mas se tirar a Foreign Key referente à tabela Disciplinas já dá? (Geoblast eu sei que os vários campos notas continua a não ser o mais eficiente, mas por agora terá de servir)

    Código:
    CREATE TABLE IF NOT EXISTS Disciplinas (
      parent int(11) NOT NULL,
      child int(11) NOT NULL auto_increment,
      nome char(30),
      tipo varchar(10) DEFAULT 'C',
      semestre char(5) DEFAULT '-',
      Ano int,
      momentos int NOT NULL,
      PRIMARY KEY (child,nome)
    )AUTO_INCREMENT=11 ;
    
    
    CREATE TABLE Notas(
    ID_Notas int NOT NULL AUTO_INCREMENT,
    n1 char(5) DEFAULT '-',
    n2 char(5) DEFAULT '-',
    n3 char(5) DEFAULT '-',
    n4 char(5) DEFAULT '-',
    n5 char(5) DEFAULT '-',
    n6 char(5) DEFAULT '-',
    n7 char(5) DEFAULT '-',
    Exame1 char(5) DEFAULT '-',
    Exame2 char(5) DEFAULT '-',
    Exame3 char(5) DEFAULT '-',
    NFinal char(5) DEFAULT '-',
    Numero int NOT NULL,
    nome char(30),
    PRIMARY KEY(ID_Notas),
    FOREIGN KEY(Numero) REFERENCES Alunos(Numero),
    FOREIGN KEY(nome) REFERENCES Disciplinas(nome));
     
  2. toblesu

    toblesu Power Member

    Boas,

    Corri o teu código e ele criou bem as tabelas..... não deu erro nenhum....

    Mas se lhe continua a criar erro, porque não cria um campo ID para a tabela disciplinas e definir este ID como sendo a chave primária dessa tabela e mudar então a chave forasteira na tabela Notas.
    Não entendo porque usa dois campos na tabela disciplinas para definir a chave primária, poderia simplificar, a menos que seja uma tabela de relação e tenha visto necessidade nesse facto! Na minha opinião, simplificaria muito criar um campo chave-primária do tipo numérico, auto-increment!
     
  3. The Dealer

    The Dealer Power Member

    "

    Infelizmente não posso mudar pois a tabela Disciplinas "constrói" um menu dinâmico, e preciso do campo child id como auto increment e consequentemente como chave primária. Daí ter colocado o nome como chave primária também só para ver se o erro desaparecia mas nem assim. Será que é um bug do WAMPP ? É que penso que no LAMPP que uso no linux consigo criar esta tabela.
     
  4. The Dealer

    The Dealer Power Member

    Exacto, parece que funciona mesmo. Não terá relacionado com o facto de no LAMPP o type estar definido (default) como MyIsam e no WAMPP InnoDB ? Não faço ideia em que medida isto afecta a base de dados, daí perguntar.

    EDIT: Pois, configurei .ini para default = MyIsam, e de facto já deu, por isso resta perguntar? Qual deverei eu usar? Pelo que li, INNODB é mais virado para integridade e relacionamentos (que é o que eu mais tenho e preciso), e MyISAM para performance. Devo portanto (se quiser mesmo estas duas tabelas assim) criá-las para MyISAM e o resto em INNODB ?
     
    Última edição: 22 de Março de 2009

Partilhar esta Página