# Add A Foreign Key Reference To A Table

Foreign keys are a great way to maintain referential integrity within our data. We can add reference columns with foreign key constraints using the Rails migration DSL.

Here is how we include one as part of creating a table:

```ruby
def up
  create_table :books do |t|
    # ... other columns

    t.references :author, index: true, foreign_key: true
  end
end
```

This will add a column, `author_id`, to the `books` table that references the `authors` table. It will have both a foreign key constraint and an index applied to it.

Here is how we do the same for an existing table:

```ruby
def up
  add_reference :books, :author, index: true, foreign_key: true
end
```

As of Rails 5, this is a bit verbose as `index: true` happens by default. Though I'm always in favor of explicitness. If for whatever reason you don't want an index, you will have to specify `index: false`.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ploegert.gitbook.io/til/programmy/rails/add-a-foreign-key-reference-to-a-table.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
