我在数据库设计中遇到了一个有趣的问题,其解决方案还不能令人满意。
我有一个包含以下字段的站点
表:
- key_station(主键)
- station_name
- info
然后我有一个位置表:
- key_position(主键)
- position_number
- info
- key_station(外键到站)
和表: -
key_setup(主键)
- setup_number
- info
- key_station(站外键)
现在,Positions 表列出了一个站的所有插槽号,而 Setups 表列出了一个站的所有可能的不同设置。我需要的是一张桌子,根据设置在每个位置都有不同的部分。有些职位可能是空的。例如...
设置 1
位置 1 - AA
Position2 - BB
Position3 - NULL
设置 2
Position1 - NULL
Position2 - CC
Position3 - NULL
所以我创建了一个表名Settings,其中包含以下字段:
- key_setting (主键)
- key_position (外键)
- key_setup (外键)
- 部分
这里的问题是我必须确保设置始终具有引用表的组合。因此,当我在示例中插入一个新位置时,它必须在设置中插入 2 条记录(每个设置一个),或者当我插入一个新设置时,它必须在设置中插入 3 条记录(每个位置一个),其中 NULL 部分用户可以稍后填写。为什么?因为每个设置中的位置都不会改变,只会改变它们分配的部分。
我目前所做的是使用两个 SQL 语句在表 Positions 和 Settings(或 Setups 和 Settings)中插入和删除。不幸的是,我遇到了插入位置或设置的问题,而表设置中没有相应的记录,因为我没有注意操作的原子性。
所以我想知道对于中间表必须具有该关系的所有组合的多对多关系的最优雅和正确的解决方案是什么。我需要什么样的标准化?或者我可以在 SQL Server 中添加什么样的约束?这个问题是否有一个特定的名称,以便我可以搜索更多?