sql - 我是否向联结表添加了不必要的数据?
问题描述
我有一个连接表,比如人员和位置
人物位置
PersonId | LocationId
---------------------
1 3
2 5
现在,位置可以属于彼此,即一个位置可以位于另一个位置内,而另一个位置可以位于另一个位置内,等等,所以我通过Location
引用自身的表定义了这个:
地点
LocationId | ArbitraryName | ParentLocationId
--------------------------------------------
1 a country null
2 region a 1
3 village 1 2
4 village 2 2
5 region b 1
所以你可以看到village 1
并village 2
属于region a
,而后者又属于a country
现在,我想知道如果人们1
访问了 Location 3
( village 1
),如第一个表所示,他们也访问了 Location2
并且1
- 这可以通过Location
表自引用来推断。
但是我所做的是编写规则(触发器),以便如果表上出现条目,PersonLocations
它会自动插入ParentLocationId
(递归工作,直到 ParentLocationId 为空)
所以插入
PersonId | LocationId
---------------------
1 3
实际上导致
PersonId | LocationId
---------------------
1 3
1 2
1 1
如果我删除,反之亦然。
我真正想知道的是——这安全吗?它使我的查询和视图变得更加容易,但我是否错过了一些后来会在背后咬我的东西?我觉得只要这些触发器到位就可以了,尽管它占用了更多空间 - 回报证明它是合理的吗?但同时我也觉得我可能违反了一些我不知道的原则……
解决方案
推荐阅读
- javascript - 正则表达式删除具有已知开始和结束模式的子字符串,中间有多个单词
- webhooks - IFTTT Webhooks 不允许 localhopst
- swift - com.apple.spaces.plist 上的 App Bindings,如何操作?
- javascript - 发送自动执行报告 - XRAY - WebdriverIO - Bamboo 集成
- python - 可以编辑附加值吗?
- json - 如何填写缺失的列值?
- python - 如何在 Flask 的 jsonify 中返回“dict”?
- javascript - 动态填充 document.getElementById
- instagram-api - Instagram 报表应用的工作逻辑是什么?
- scala - Spark Scala - 表示没有日期的时间的列的数据类型(hhmm 格式)