The above answer is absolutely correct. I’ve extensively used both DataAssets and DataTables in both C++ and Blueprints. Using DataTables based on blueprint defined structs is a risky endeavor that can cause your project to have to pretty rough corruption issues.
I prefer DataAssets because of how powerful they can be in combination with these two UCLASS specifiers:
Using DataAssets, you can dynamically change behavior and the available data fields with different subclasses of a UObject: