An algebraic take on small categories Stripping away the bulk of category theory and treating [small] categories as a type of algebraic structure, does the following suffice to axiomatise category theory? If not, what am I missing?

A [small] category is a $5$-tuple $\mathcal{C}=(C,M,s,t,\circ)$, where $C$ is the set of objects, $M$ the set of morphisms, $s:M\to C$ the source function, $t: M\to C$ the target function, and $\circ$ a partial operation $M^2\to M$, which satisfies the category axioms$^*$:
$$\begin{matrix}
\mathbf{comp}_1 & \forall f,g\in M.t(f)=s(g)\implies g\circ f\in M\\
\mathbf{comp}_2 & \forall f,g\in M.g\circ f\in M\implies s(g\circ f)=s(f)\\
\mathbf{comp}_3 & \forall f,g\in M.g\circ f\in M\implies t(g\circ f)=t(g)\\
\mathbf{assoc} & \forall f,g,h\in M.f\circ(g\circ h)=(f\circ g)\circ h\\
\mathbf{id} & \forall X\in C.\exists f\in M.s(f)=t(f)=X
\end{matrix}$$
Edit:
$$\begin{matrix}
\mathbf{id}_1 & \forall X\in C.\exists f\in M.s(f)=t(f)=X\\
\mathbf{id}_2 & \forall f,g\in M.s(f)=t(f)\land s(g)=t(f)\implies g\circ f=g\\
\mathbf{id}_3 & \forall f,g\in M.s(f)=t(f)\land t(g)=s(f)\implies f\circ g=g
\end{matrix}$$

$^*$ In keeping with the typical naming conventions of abstract algebra (e.g. group axioms, field axioms, etc.)
 A: After noting that objects are unnecessary (we can just identify them with the identity arrows)$^1$, there are three basic ways to treat (small) categories "algebraically:"


*

*Essentially as you've done (after throwing out objects and more importantly incorporating Thomas Andrews' observation in the comments). This involves using partial functions - namely composition - which isn't always something we want to do; on the plus side, it's extremely natural.

*Using relations to replace the partial composition function. This is the approach I've seen in the literature, and I mention it here. The downside is that this is no longer strictly "algebraic" in the sense of universal algebra.

*Adding some "formal element" $\perp$ which we send every undefined expression to and which is an annihilator for every operation (e.g. "composing" $\perp$ with something just yields $\perp$ again). This carries the same information but is generally considered bad, if only from an aesthetic standpoint.

$^1$See my linked answer for how this plays out if we use the second approach; it's handled identically in the first and third.
