# Composite keys

**URL:** <https://forum.datomic.com/t/composite-keys/450>\
**Category:** Datomic Cloud\
**Created:** [June 4, 2018, 9:38pm UTC](https://forum.datomic.com/t/composite-keys/450 "2018-06-04T21:38:59Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![markaddleman](https://avatars.discourse-cdn.com/v4/letter/m/a8b319/32.png) [@markaddleman](https://forum.datomic.com/u/markaddleman)\
**Post date:** [June 4, 2018, 9:38pm UTC](https://forum.datomic.com/t/composite-keys/450/1 "2018-06-04T21:38:59Z")

</div>

We have an entity with a composite key that we’d like to remain unique within the database. The Datomic Cloud documentation mentions

> Datomic does not provide a mechanism to declare composite uniqueness constraints; however, you can implement them (or any arbitrary functional constraint) via transaction functions.

Is there some example of this? I’m guess that we should use :db/cas but it’s not clear how. Can we write our own transaction functions?

---

<div class="post-metadata">

**Author:** ![marshall](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.datomic.com/marshall/32/48_2.png) [@marshall](https://forum.datomic.com/u/marshall)\
**Post date:** [June 19, 2018, 3:39pm UTC](https://forum.datomic.com/t/composite-keys/450/2 "2018-06-19T15:39:35Z")

</div>

You can use Datomic Ions to implement [transaction functions](https://docs.datomic.com/cloud/transactions/transaction-functions.html#custom) in Datomic Cloud.

The code in the Ion transaction function is entirely up to you, so you can implement your required constraints however you prefer.

---

<div class="post-metadata">

**Author:** ![markaddleman](https://avatars.discourse-cdn.com/v4/letter/m/a8b319/32.png) [@markaddleman](https://forum.datomic.com/u/markaddleman)\
**Post date:** [June 21, 2018, 12:14am UTC](https://forum.datomic.com/t/composite-keys/450/3 "2018-06-21T00:14:46Z")

</div>

Thanks!
