If you use STI, you could model this cleaner. Right now, it is possible that two layers accidentally point to the same keyframe.

```ruby
has_one :start_keyframe
has_one :target_keyframe
has_one :end_keyframe
```

in StartKeyFrame.rb

```ruby
belongs_to :layer
```