Animals hierarchy use-case: multiple farms, multiple species
The best approach would be neither of the two options you've proposed.  Instead you should create your own proprietary surrogate key using either a monotonically increasing integer or a GUID if that is how you like to do these things.  This key column would be NOT NULL on your animal table (obviously).

You need to keep all of the external IDs that are provided to you (internal/national) and use these to establish the mother_id and father_id of each new animal that you add to your database according to the complex rules that you've described.

This approach allows your system to take advantage of declarative referential integrity and ANSI SQL joining while preserving the mixed bag of external IDs that are provided to you for reference/reporting etc.