diff --git a/src/db/src/private/record.cpp b/src/db/src/private/record.cpp
index 6b19aab..3881119 100644
--- a/src/db/src/private/record.cpp
+++ b/src/db/src/private/record.cpp
@@ -32,7 +32,7 @@ QString Record::table() const {
 
 QH::PKG::DBVariantMap Record::variantMap() const {
     return {
-        {"hash",  {_hash,  QH::PKG::MemberType::Unique}},
+        {"hash",  {_hash,  QH::PKG::MemberType::PrimaryKey}},
         {"alias", {_alias, static_cast<QH::PKG::MemberType>(static_cast<int>(QH::PKG::MemberType::InsertUpdate) |
                                                             static_cast<int>(QH::PKG::MemberType::Unique))}},
         {"data",  {_data,  QH::PKG::MemberType::Insert}}
@@ -41,11 +41,17 @@ QH::PKG::DBVariantMap Record::variantMap() const {
 }
 
 QString Record::primaryKey() const {
-    return "hash";
+    if (_hash.size())
+        return "hash";
+
+    return "alias";
 }
 
 QVariant Record::primaryValue() const {
-    return _hash;
+    if (_hash.size())
+        return _hash;
+
+    return _alias;
 }
 
 const QString &Record::getAlias() const {
@@ -70,7 +76,7 @@ const QByteArray &Record::getData() const {
 
 const QByteArray &Record::setData(const QByteArray &newData) {
     _data = newData;
-    setHash(QCryptographicHash::hash(_data, QCryptographicHash::Sha256));
+    setHash(QCryptographicHash::hash(_data, QCryptographicHash::Sha256).toBase64(QByteArray::Base64UrlEncoding));
     return getHash();
 }
 
diff --git a/src/db/src/private/secretdatabase.cpp b/src/db/src/private/secretdatabase.cpp
index 2d6ae72..5b627c0 100644
--- a/src/db/src/private/secretdatabase.cpp
+++ b/src/db/src/private/secretdatabase.cpp
@@ -6,6 +6,7 @@
 //#
 
 #include "secretdatabase.h"
+#include "record.h"
 #include <QCryptographicHash>
 #include <dbobjectsrequest.h>
 #include <sqldb.h>
@@ -26,16 +27,16 @@ SecretDataBase::SecretDataBase() {
 
 QSharedPointer<iRecord>
 SecretDataBase::getRecordByAlias(const QString &alias, bool ifNotExistsCreate) {
-
+    return getById<Record>(alias, &Record::setAlias, ifNotExistsCreate);
 }
 
 QSharedPointer<iRecord>
 SecretDataBase::getRecordByHash(const QByteArray &hash, bool ifNotExistsCreate) {
-
+    return getById<Record>(hash, &Record::setHash, ifNotExistsCreate);
 }
 
 bool SecretDataBase::saveRecord(const QSharedPointer<iRecord> &record) {
-
+    return db()->replaceObject(record.staticCast<Record>(), true);
 }
 
 }
diff --git a/src/db/src/public/SecretDB/idatabase.cpp b/src/db/src/public/SecretDB/idatabase.cpp
index c12d972..54cf463 100644
--- a/src/db/src/public/SecretDB/idatabase.cpp
+++ b/src/db/src/public/SecretDB/idatabase.cpp
@@ -8,8 +8,7 @@
 #include "idatabase.h"
 namespace  DBSecret {
 
-IDataBase::IDataBase()
-{
+IDataBase::IDataBase() {
 
 }
 }
diff --git a/tests/units/dbtest.cpp b/tests/units/dbtest.cpp
index 4cfba5e..1feceb4 100644
--- a/tests/units/dbtest.cpp
+++ b/tests/units/dbtest.cpp
@@ -7,6 +7,7 @@
 
 
 #include "dbtest.h"
+#include "heart.h"
 #include <SecretDB.h>
 
 DBTest::DBTest() {
@@ -18,6 +19,7 @@ DBTest::~DBTest() {
 }
 
 void DBTest::test() {
+    QH::init();
     DBSecret::init();
     auto database = DBSecret::database();
 
@@ -29,7 +31,7 @@ void DBTest::test() {
     QSharedPointer<DBSecret::iRecord> result;
     QVERIFY2((result = database->getRecordByAlias("test", true)), "must creat a new empty record");
 
-    QVERIFY2(database->getRecordByAlias("test"),
+    QVERIFY2(!database->getRecordByAlias("test"),
              "still should be empty because the getRecordByAlias with creation option do not save object into database");
 
     QVERIFY2(result->getAlias() == "test", "verify alias");
@@ -39,7 +41,7 @@ void DBTest::test() {
     auto dataHash = result->setData("secret");
 
     QVERIFY2(result->getAlias() == "test", "verify configured record");
-    QVERIFY2(result->getData() == "test", "verify configured record");
+    QVERIFY2(result->getData() == "secret", "verify configured record");
     QVERIFY2(result->getHash() == QCryptographicHash::hash("secret",
                                                            QCryptographicHash::Sha256).toBase64(QByteArray::Base64UrlEncoding),
              "verify configured record");
@@ -50,9 +52,13 @@ void DBTest::test() {
 
     auto result2 = database->getRecordByAlias("test");
 
-    QVERIFY2(result2.data() == result.data(), "should be some as a prev object");
+    QVERIFY2(result2->getAlias() == result->getAlias(), "should be some as a prev object");
+    QVERIFY2(result2->getHash() == result->getHash(), "should be some as a prev object");
+    QVERIFY2(result2->getData() == result->getData(), "should be some as a prev object");
 
     result2 = database->getRecordByHash(dataHash);
 
-    QVERIFY2(result2.data() == result.data(), "should be some as a prev object");
+    QVERIFY2(result2->getAlias() == result->getAlias(), "should be some as a prev object");
+    QVERIFY2(result2->getHash() == result->getHash(), "should be some as a prev object");
+    QVERIFY2(result2->getData() == result->getData(), "should be some as a prev object");
 }