Skip to content

Data Model

Korta uses PostgreSQL with Prisma ORM. The data model is intentionally small and centered around users and shortened URLs.

FieldTypeRequiredNotes
idIntYesPrimary key, auto-increment.
emailStringYesUnique user email.
passwordString | nullNoPresent for email/password users.
googleIdString | nullNoUnique Google OAuth identifier.
nameString | nullNoDisplay name.
apiKeyString | nullNoUnique integration key for X-API-Key.
isVerifiedBooleanYesEmail verification state.
verificationTokenString | nullNoTemporary token for email verification flow.
createdAtDateTimeYesAuto-set on create.
updatedAtDateTimeYesAuto-updated on changes.
FieldTypeRequiredNotes
idIntYesPrimary key, auto-increment.
originalUrlStringYesDestination URL.
shortIdStringYesUnique short slug.
clicksIntYesClick counter, default 0.
userIdInt | nullNoOwner user id (nullable for anonymous/public links).
createdAtDateTimeYesAuto-set on create.
updatedAtDateTimeYesAuto-updated on changes.
  • User (1) -> (N) Url: A user can own many shortened URLs.
  • Url (N) -> (0..1) User: A URL may belong to a user, or be anonymous (userId = null).
  • User.email is unique.
  • User.googleId is unique when present.
  • User.apiKey is unique when present.
  • Url.shortId is globally unique.