'Sql Fiddle errors

I am trying to create SQL statements for an assignment in SQL Fiddle and I keep getting the error "Cannot add foreign key constraint". I have tried various things but I recieve different errors when I change things. What am I doing wrong?

  CREATE TABLE Person (
    ID int NOT NULL,
    FName varchar(255),
    LName varchar(255),
    Preferred_Name varchar(255),
    PRIMARY KEY (ID)
    )
    ;
    
     CREATE TABLE Song (
      ID varchar(255) NOT NULL,
      Title varchar(255),
      Run_Time varchar(255),
      Lyrics varchar(255),
      LeadID int,
      FOREIGN KEY (LeadID) REFERENCES Person(ID),
      PRIMARY KEY (ID)
      )
      ;
      
      CREATE TABLE Album (
        Title varchar(255) NOT NULL,
        Run_Time int,
        Release_Year TIMESTAMP,
        PRIMARY KEY (Title)
        )
        ;
        
        CREATE TABLE Has (
          Album_Title varchar(255),
          Song_Title varchar(255),
          FOREIGN KEY (Album_Title) REFERENCES Album(Title),
          FOREIGN KEY (Song_Title) REFERENCES Song(ID)
          )
          ;
          
          CREATE TABLE Part_Of (
            PersonID int,
            SongID int,
            Role varchar(255) NOT NULL,
            FOREIGN KEY (PersonID) REFERENCES Person(ID),
            FOREIGN KEY (SongID) REFERENCES Song(ID),
            PRIMARY KEY (Role)
            )
            ;
sql


Solution 1:[1]

In the Song and Has tables you defined Song.ID and Has.Song_Title as a varchar(255). In the Part_Of table you defined SongID as an int. This is why the foreign key is failing. Use the same datatype in all tables (INT seems like a good option) to fix this.

CREATE TABLE Song (
      ID varchar(255) NOT NULL, <------
      Title varchar(255),
      Run_Time varchar(255),
      Lyrics varchar(255),
      LeadID int,
      FOREIGN KEY (LeadID) REFERENCES Person(ID),
      PRIMARY KEY (ID)
      )
      ;

CREATE TABLE Has (
      Album_Title varchar(255),
      Song_Title varchar(255), <-----
      FOREIGN KEY (Album_Title) REFERENCES Album(Title),
      FOREIGN KEY (Song_Title) REFERENCES Song(ID)
  )
  ;


CREATE TABLE Part_Of (
      PersonID int,
      SongID int, <-----
      Role varchar(255) NOT NULL,
      FOREIGN KEY (PersonID) REFERENCES Person(ID),
      FOREIGN KEY (SongID) REFERENCES Song(ID),
      PRIMARY KEY (Role)
      )
      ;

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1