如何解决根据user_id选择值属性的唯一组合
我有一个表,该表具有用户user_id和该用户的每个返回原因的新记录。如此处所示:
| user_id | return_reason | |--------- |-------------- | | 1 | broken | | 2 | changed mind | | 2 | overpriced | | 3 | changed mind | | 4 | changed mind |
我想做的是为适用于新表的值的每种组合生成一个外键,并将该键应用于新表中的user_id。有效地建立了多对多关系。结果看起来像这样:
维度表->
| reason_id | return_reason | |----------- |--------------- | | 1 | broken | | 2 | changed mind | | 2 | overpriced | | 3 | changed mind |
事实表->
| user_id | reason_id | |--------- |----------- | | 1 | 1 | | 2 | 2 | | 3 | 3 | | 4 | 3 |
我的思维过程是用游标遍历表,但这似乎是一个标准问题,因此有一种更有效的方法。这类问题是否有特定名称?我还考虑过旋转和不旋转。但这似乎也不太干净。对于如何处理此问题的任何帮助或对文章的引用,将不胜感激。
解决方法
问题涉及数据规范化和关系完整性。您的概念实际上没有意义-维度表显示具有相同ID的两个不同原因,而事实表则丢失了记录。这种多对多关系的传统模式将是三个表,例如:
- Users表(关于用户和UserID的信息是唯一的)
- 原因表(有关原因和ReasonID的信息是唯一的)
- UserReasons联结表(将用户与原因相关联-您的 现有表格)。假设用户可以以相同的原因进行关联 多次,可能还需要ReturnDate和OrderID_FK字段 在UserReasons中。
因此,需要将第一个表(UserReasons)中的原因描述替换为ReasonID。在该表中添加一个数字长整数字段ReasonID_FK来保存ReasonID键。
要基于当前数据构建原因表,请使用DISTINCT:SELECT DISTINCT return_reason INTO Reasons FROM UserReasons
在新表中,将return_reason字段重命名为ReasonDescription并添加一个自动编号字段ReasonID。
现在运行UPDATE操作以填充UserReasons中的ReasonID_FK字段。UPDATE UserReasons INNER JOIN UserReasons.return_reason ON Reasons.ReasonDescription SET UserReasons.ReasonID_FK = Reasons.ReasonID
一切正常后,请删除return_reason字段。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。