How can I build a risk matrix in databse tables? I'd like to build a risk matrix in a SQL database.  A very basic one looks like so:

------------------------------------
|          |Consequence            |
|Likelihood|Low    |Medium |High   |
|Low       |Level 1|Level 1|Level 2|
|Medium    |Level 1|Level 2|Level 3|
|High      |Level 2|Level 3|Level 4|
------------------------------------


My current ERD looks like this:



I will have a software program that will read from another table (it exists out of frame immediately to the left of that screenshot).  This other table contains values for likelihood and consequence associated with a particular entry in that table.  The program will then query the risk matrix and return a risk level (eg. Having likelihood = Low and consequence = High would return a risk level = Level 1).

As you can see in the diagram, on the risk matrix table I have foreign keys linking likelihoodid and consequenceid to their respective tables.  I also have a composite primary key across likelihoodid and consequenceid.  Currently there is a composite unique key across likelihoodid and consequenceid also because some research I did suggested I needed this, but it seems wrong to me.

Is this design OK, completely wrong, or needs some tweaking?

Edit

DDL as requested:

CREATE TABLE IF NOT EXISTS `likelihoods` (
  `likelihoodid` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
  `shortname` varchar(50) NOT NULL,
  `longname` tinytext DEFAULT NULL,
  PRIMARY KEY (`likelihoodid`)


CREATE TABLE IF NOT EXISTS `consequences` (
  `consequenceid` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
  `shortname` varchar(50) NOT NULL,
  `longname` tinytext DEFAULT NULL,
  PRIMARY KEY (`consequenceid`)


CREATE TABLE IF NOT EXISTS `riskmatrix` (
  `likelihoodid` tinyint(3) unsigned NOT NULL,
  `consequenceid` tinyint(3) unsigned NOT NULL,
  `levelid` tinyint(3) unsigned NOT NULL,
  PRIMARY KEY (`likelihoodid`,`consequenceid`),
  UNIQUE KEY `UK_likelihoodid_consequenceid` (`likelihoodid`,`consequenceid`),
  KEY `FK_riskmatrix_consequences` (`consequenceid`),
  KEY `FK_riskmatrix_risklevels` (`levelid`),
  KEY `FK_riskmatrix_likelihoods` (`likelihoodid`),
  CONSTRAINT `FK_riskmatrix_consequences` FOREIGN KEY (`consequenceid`) REFERENCES `consequences` (`consequenceid`),
  CONSTRAINT `FK_riskmatrix_likelihoods` FOREIGN KEY (`likelihoodid`) REFERENCES `likelihoods` (`likelihoodid`),
  CONSTRAINT `FK_riskmatrix_risklevels` FOREIGN KEY (`levelid`) REFERENCES `risklevels` (`levelid`)
OK based on @Lennart's feedback, this is a pretty good design for a risk matrix in a database, to suit my needs as described in the question.  I've removed the Unique Key, which was duplicating the Primary Key.

CREATE TABLE IF NOT EXISTS `likelihoods` (
  `likelihoodid` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
  `shortname` varchar(50) NOT NULL,
  `longname` tinytext DEFAULT NULL,
  PRIMARY KEY (`likelihoodid`)


CREATE TABLE IF NOT EXISTS `consequences` (
  `consequenceid` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
  `shortname` varchar(50) NOT NULL,
  `longname` tinytext DEFAULT NULL,
  PRIMARY KEY (`consequenceid`)


CREATE TABLE IF NOT EXISTS `riskmatrix` (
  `likelihoodid` tinyint(3) unsigned NOT NULL,
  `consequenceid` tinyint(3) unsigned NOT NULL,
  `levelid` tinyint(3) unsigned NOT NULL,
  PRIMARY KEY (`likelihoodid`,`consequenceid`),
  KEY `FK_riskmatrix_consequences` (`consequenceid`),
  KEY `FK_riskmatrix_risklevels` (`levelid`),
  KEY `FK_riskmatrix_likelihoods` (`likelihoodid`),
  CONSTRAINT `FK_riskmatrix_consequences` FOREIGN KEY (`consequenceid`) REFERENCES `consequences` (`consequenceid`),
  CONSTRAINT `FK_riskmatrix_likelihoods` FOREIGN KEY (`likelihoodid`) REFERENCES `likelihoods` (`likelihoodid`),
  CONSTRAINT `FK_riskmatrix_risklevels` FOREIGN KEY (`levelid`) REFERENCES `risklevels` (`levelid`)