复杂模式的 Rails/General SQL 实体属性值
Posted
技术标签:
【中文标题】复杂模式的 Rails/General SQL 实体属性值【英文标题】:Rails/General SQL entity-attribute-value for complex schema 【发布时间】:2021-08-22 17:02:13 【问题描述】:我在为一组复杂的关系想出一个有效的数据库模型时遇到了一些麻烦,我想知道我当前的实现是否能正常工作。
我正在处理特定位置的数据,在本例中为城市许可证,存储许可证要求,并将它们与特定位置相关联。因为有很多城市,而且每个城市的许可要求也不同,我正在努力寻找记录特定地点的许可要求进度的最佳方式。
目前,我的架构如下所示:
<permit>
id
type
state
<requirements>
id
key
value
<permit_requirements>
permit_id
requirement_id
这适用于存储所有许可要求并调用它们。问题在于将它们与特定位置相关联。目前我有:
<location>
id
state
<location_permits>
permit_id
location_id
这适用于返回所有许可证(按州过滤)和孩子的要求。但是要存储特定要求的状态,我在想:
<location_requirement_answers>
location_id
requirement_id
status
这有意义吗?这是反模式吗?我无法思考获取整个许可证的最佳方式以及每个位置的特定状态。
我认为相关许可会创建基本列表,然后在更改时我会专门更新location_requirements_answer
。但这是否需要location_permits
的另一个关系,即location_permit_answers
,除了已回答的要求之外,这基本上会复制原始关系?
非常感谢任何帮助!
【问题讨论】:
你能提供更多的上下文吗?是否有个人或公司需要申请此城市许可证?还是来自国家本身? 当然@double_u1!不需要特定的请求,它们只是来自州,管理员上传要求。例如,可能有一个带有type
“fire”和 x 个要求的许可证,即带有key
“6' 可防御空间”的要求。我遇到的问题是,在数据库中包含许可 + 要求之后,任何数量的用户都可以将特定要求标记为完成。
【参考方案1】:
我仍然无法解决这个问题,但这似乎是目前可行的方法(尽管存在太多的数据库查询肯定无法扩展的性能问题):
-
删除
<location_permits>
permits
属性添加到location
并按状态过滤,这也会引入嵌套的requirements
使用返回的requirement_id
查询location_requirements_answers
【讨论】:
以上是关于复杂模式的 Rails/General SQL 实体属性值的主要内容,如果未能解决你的问题,请参考以下文章