在 SQL 数据库中使用以太坊地址作为主键

Using ethereum address as primary key in SQL database

我的应用程序中的用户不会使用标准身份验证进行身份验证。

相反,当他们创建像 MetaMask 这样的以太坊钱包时,他们的 public 以太坊地址 (char(42)) 将成为他们的身份。

关于在 SQL 中识别用户的主键是什么,这让我有些进退两难,因为确实没有 createUser 这样的东西。

42 个字符似乎是一个很长的查询字符串,作为对常规主键的权衡。那么你如何解决这个难题呢?

您可能不希望数据库中潜伏着一个 42 个字符的键,占用 space 引用用户和其他表的索引,其中 42 - 4 个字节是不必要的。

我会推荐一个合成密钥:

create table users (
    user_id int generated always as identity primary key,
    ethereum_key char(42) unique not null,
    . . .
);

在旧版本的 Postgres 中,您将使用:

    user_id serial primary key,

您可以在整个数据库中使用int user_id。在需要的地方查找 ethereum_key

我们正在走动多少用户?如果我们不谈论超过 1M 或更多,那么只需将 42 个字符作为索引和主键,然后在其上创建索引就可以了。您也可以只使用不带长度参数的 varchar,因为它并不重要