Foreign Key as Primary Key when "converting" conceptual entity-relationship elements to logical relations
Apparently, the problem at hand is about "resolving" many-to-many relationships that may occur in ERDs.  A popular approach is: to add an intersection entity - aka as junction and under various other names - that has 1-to-many relationships to the original entities.  Example - entities: NUMBER and LETTER.  Suppose the (integer) numbers 1-26 can be combined with the letters A-Z.  And: we only want to allow unique combinations of numbers and letters.  Initially, we have a M:M relationship between the 2 entities.  In order to resolve this, we add an INTERSECTION (the original M:M relationship is still there, but will not be needed at the later stages)


When using Oracle's "datamodeler", we can forward-engineer the ERD to a relational model, which shows us some implementation details:  1 the 2 columns of the INTERSECTION have foreign key constraints (referencing the tables NUMBER and LETTER, respectively.  This will allow multiple occurrences of (one and the same) letter/number.  2 the 2 columns "NUMBER_number_" and "LETTER_letter_" have a primary key constraint ie (among other things): only unique number/letter combinations are allowed.  (Notice that this particular modelling software even generates an intersection table "Relational_1" automatically ...)  



The resulting DDL code, and some code for testing, could be something like (table/column/constraint names differ from the models, MySQL 5.7): 

-- test tables and data
-- parent tables
create table t_numbers ( number_ integer primary key ) ;
create table t_letters ( letter_ varchar(1) primary key );


drop procedure if exists populate_n_l;
delimiter //

create procedure populate_n_l()
begin
  declare v1 int default 1 ;

  while v1 &lt;= 26 do
    insert into t_numbers ( number_ ) values ( v1 ) ;
    insert into t_letters ( letter_ ) values ( char( v1 + 64 ) ) ;
    set v1 := v1 + 1 ;
  end while;

end//

delimiter ;

call populate_n_l() ;


Finally:

-- intersection
create table t_intersect (
  inumber integer
, iletter varchar(1)
-- constraints
, constraint fkey_number 
     foreign key( inumber ) references t_numbers( number_ )
, constraint fkey_letter
     foreign key( iletter ) references t_letters( letter_ )
, constraint pkey_combination 
     primary key ( inumber, iletter )
) Engine=InnoDB;


Testing:

-- okay (valid combination)
  insert into t_intersect ( inumber, iletter )
    values ( 1, 'A' ) ;

-- does NOT work ( as expected! - number/letter combinations must be unique ... )
  insert into t_intersect ( inumber, iletter )
    values ( 1, 'A' ) ;
-- ERROR 1062 (23000): Duplicate entry '1-A' for key 'PRIMARY'

  insert into t_intersect ( inumber, iletter )
    values ( 1, '1' ) ;
-- ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails ...

  insert into t_intersect ( inumber, iletter )
    values ( 0, 'D' ) ;
-- ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails ...


-- fine
  insert into t_intersect ( inumber, iletter )
    values ( 1, 'B' ) ;
  insert into t_intersect ( inumber, iletter )
    values ( 1, 'C' ) ;


mysql&gt; select * from t_intersect;
+---------+---------+
| inumber | iletter |
+---------+---------+
|       1 | A       |
|       1 | B       |
|       1 | C       |
+---------+---------+


Dbfiddle here.