在DB设计中做UNION类型的反模式



我有各种"命名对象",它们有一些共享属性,我认为在我的数据库中以以下格式保存它们可能最有意义:

  • NamedObjectWrapper

    • ID
    • 创建者
    • 名称

    (这是我标记的联合(

    • NamedObjectType
    • NamedObject1(FK NULLable(
    • NamedObject2(FK NULLable(
    • NamedObject3(FK NULLable(
  • NamedObject1

  • NamedObject2

  • NamedObject3

将恰好设置NamedObject1NamedObject2NamedObject3中的一个,其他两个为空。上面的方法可以吗?我认为更具关系性的方法是,只存储三个具有所有重复属性的表是可以的,但我会一直将这三个表联合在一起,所以我认为这样做节省了很多工作。

相反,您可以将详细对象上的FK转换为存储在基础对象上的共享信息。例如:

NamedObjectBase

  • ID

NamedObject1

  • 基本ID(FK(

NamedObject2

  • 基本ID(FK(

NamedObject3

  • 基本ID(FK(

最新更新