在 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,因为它并不重要
我的应用程序中的用户不会使用标准身份验证进行身份验证。
相反,当他们创建像 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,因为它并不重要