"best practice" is to
- understand each
- utilise each where it is best for *your* situation
If a book, blog, etc says "use bitmap indexes when the distinct values are less than 5% of the rows", then trusting that as a bulletproof recommendation is a recipe for disaster.
So, in terms of foreign locking:
In the docs
https://docs.oracle.com/cd/E11882_01/server.112/e40540/consist.htm#CNCPT88972 under the section "Locks and Foreign Keys", you'll that
a) when you have a child table to refers back to a parent table, and
b) the column in the *child* table is not indexed, and
c) you do certain kinds of operations on the *parent* table (eg delete)
then the whole child table is locked for the duration of the statement's execution.
Sometimes this is not an issue, sometimes it is. But if you decide that you *do* need that index, then a bitmap index is not sufficient to solve the locking issue - it has to be a b-tree index.