Following is the installer script to create table with foreign Key.
<?php
$installer = $this;
$installer->startSetup();
$questionTable = $installer->getConnection()
->newTable($installer->getTable('mymodule/question'))
->addColumn('question_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array(
'identity' => true,
'unsigned' => true,
'nullable' => true,
'primary' => true
), 'Question ID')
->addColumn('question', Varien_Db_Ddl_Table::TYPE_VARCHAR, null, array(), 'Question')
->setComment('Question Table');
$installer->getConnection()->createTable($questionTable);
$answerTable = $installer->getConnection()
->newTable($installer->getTable('mymodule/answer'))
->addColumn('answer_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array(
'identity' => true,
'unsigned' => true,
'nullable' => true,
'primary' => true
), 'Answer ID')
->addColumn('question_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array(
'nullable' => true,
'default' => null
), 'Question ID')
->addColumn('answer', Varien_Db_Ddl_Table::TYPE_VARCHAR, null, array(), 'Answer')
->addForeignKey(
$installer->getFkName('mymodule/answer', 'question_id', 'mymodule/answer', 'answer_id') ,
'question_id',
$installer->getTable('mymodule/answer'),
'question_id',
Varien_Db_Ddl_Table::ACTION_CASCADE,
Varien_Db_Ddl_Table::ACTION_CASCADE
)
->setComment('Answer Table');
$installer->getConnection()->createTable($anwserTable);
?>
Here
->addForeignKey(
$installer->getFkName('mymodule/answer', 'question_id', 'mymodule/answer', 'answer_id') , // It will create unique Foreign key name
'question_id', // Question table primary key
$installer->getTable('mymodule/answer'), // Current table name
'question_id', // Foreign key for question table
Varien_Db_Ddl_Table::ACTION_CASCADE,
Varien_Db_Ddl_Table::ACTION_CASCADE
)