首页 > 解决方案 > 我是否向联结表添加了不必要的数据?

问题描述

我有一个连接表,比如人员和位置

人物位置

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 1village 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

如果我删除,反之亦然。

我真正想知道的是——这安全吗?它使我的查询和视图变得更加容易,但我是否错过了一些后来会在背后咬我的东西?我觉得只要这些触发器到位就可以了,尽管它占用了更多空间 - 回报证明它是合理的吗?但同时我也觉得我可能违反了一些我不知道的原则……

标签: sqlsql-server

解决方案


推荐阅读