如何为AppSync GraphQL指定?id=ID!格式的SK复杂类型
DynamoDB单表设计中指定SK格式与类型的方法
需求背景
我熟悉DynamoDB单表设计思路,希望使用通用属性名(如PK、SK)构建表结构,期望的表结构如下:
PK | SK | LSI1 | ... --------------------------------------------------- PRODUCT | ?id=1234-1234-1234 | ?type=shoe | ... ---------------------------------------------------
而非传统的多属性结构:
id | type1 | type2 | ... ------------------------------------------------------ 1234-1234-1234 | PRODUCT | shoe | ... ------------------------------------------------------
我的问题是:如何为上述示例中的SK指定类型?我希望将其指定为带有?id=前缀和UUID格式ID的String类型。
解决方案
- 确认属性类型:DynamoDB中PK和SK直接设置为
String类型即可,这是单表设计的常规操作,完全支持带前缀的字符串格式。 - 应用层强制格式:在写入数据的业务代码里手动拼接SK的格式:
- 比如Python中:
sk = f"?id={your_uuid}"(your_uuid是符合xxxx-xxxx-xxxx格式的ID) - 同时可添加格式校验逻辑,用正则表达式检查ID是否符合UUID规则,不符合则拦截写入,避免脏数据。
- 比如Python中:
- DynamoDB条件表达式校验(可选):如果需要数据库层面的兜底校验,写入时可添加条件表达式确保SK符合要求:
- 用
begins_with(SK, '?id=')保证前缀正确 - 配合
REGEX_MATCH函数校验ID部分格式,示例表达式:REGEX_MATCH(SK, '\\?id=[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}')
- 用
- LSI1的格式控制:示例中的LSI1字段(
?type=shoe)遵循同样逻辑,类型设为String,写入时拼接?type=前缀即可。
内容的提问来源于stack exchange,提问作者neaumusic
相关产品推荐
相关产品推荐

