Если #bd - это база данных, то ты мудак, осваивай Local Storage и indexedDB (оно в зачаточном состоянии правда). Если какие-то небольшие данные, которые нужно проассоциировать именно с этим элементом и в рантайме хранить не хочется/не получается, то наверно нормально, хотя наверняка можно обойтись и без этого.
Ну, HTML5 отводит атрибуты data-тут-чего-хочешь под пользовательские данные. Так то, конечно, можно любые использовать, но в этом случае не наткнёшь на инновационный атрибут в каком-нибудь HTML10.
Есть даже API отдельный, но он, естественно, работает только в новых браузерах. А так можно читать и обычными set/getAttribute или чем ещё там сможешь. Это обычные атрибуты.
То есть data-тут-чего-хочешь — это специально отведенный аттрибут тега, который просто хранит строковую информацию? Но если мне нужно, я могу всё-же делать, например document.getElementById('bd').dataHello = ['w', 'o', 'r', 'l', 'd']?
var element = document.getElementById('bd');
element.dataset['hello'] = 'что-то-там'; // тут к элементу дописывается аттрибут data-hello
console.log(element.dataset.hello);
.data() сохраняет в каком-то внутреннем хранилище, точно не знаю как оно работает, но в аттрибуты оно точно не пишет. А когда ты обращаешься к нему и пытаешься взять значение по какому-то ключу оно может подхватить значение из соответствующего аттрибута.