下面的图片展示了两种不同的数据库设计方案。一种是使用两个外键的组合,另一种则使用自己的代理键。第二种选择将在DanceGroupId和StudioId上设置一个组合唯一约束条件,以避免输入两个相同的值。我一直采用第一种设计,但在使用C#构建类之后,如果我能在所有表上放置一个通用的非组合代理键,那么它将有助于C#代码的重用。在数据库设计方面,相对于组合键,在像Booking这样的表上使用代理键有哪些负面影响?
我不是在寻求关于组合键和代理键的一般性争论,因为我的第一种选择中的组合键由外键组成。据我所知,代理键比自然键更受欢迎,因为它们不依赖于业务相关数据。但在这种情况下,这不是一个问题,也从未是。然而,我从未在“中间”表上看到过这种方法。像第二个选项一样实现似乎是合理的,但我想知道是否有什么我忽略的东西。
我不是在寻求关于组合键和代理键的一般性争论,因为我的第一种选择中的组合键由外键组成。据我所知,代理键比自然键更受欢迎,因为它们不依赖于业务相关数据。但在这种情况下,这不是一个问题,也从未是。然而,我从未在“中间”表上看到过这种方法。像第二个选项一样实现似乎是合理的,但我想知道是否有什么我忽略的东西。