By definition, BDD is based upon TDD and is a refinement / extension / specialization of the latter.
is it enough to do just one or the other?
According to the above, you can't do BDD without TDD.
In general, there is no one-size-fits-all answer: do what suits your team and your project the best. Feel free to experiment with new ideas, pick what works and drop or change what doesn't.
Moreover, this is not an all or nothing question: you can do TDD enhanced with specific ideas from BDD which you feel are a valuable addition to your process. For example, I adapted the "should" naming convention of unit tests in my practice because I find it makes my unit tests more readable and expressive.