首页 > 解决方案 > 关系数据库的理想数据模型

问题描述

我有 3 个对象(供应商、经理、客户),每个对象都有 1 个徽标。每个对象都有如下数据模型(以Manager为例):

 const Manager = sequelize.define('manager', {
    id: {
      ...
    },
    user_id: {
      ...
    },
    name: {
      ...
    },
    // other stuff
})

  Manager.associate = (models) => {
    Manager.belongsTo(models.user, { foreignKey: 'user_id' })
  }

Logo模型如下:

  const Logo = sequelize.define('logo', {
    id: {
      ...
    },
    owner_id: {
      ...
    },
    url: {
      ...
    },
    width: {
      ...
    },
    // other stuff
})

如果我将所有徽标放在一个 Logo 模型中,那么 owner_id 不知道是指 Manager、Vendor 还是 Customer。

什么被认为是合适的:

  1. 制作一个单独的 ManagerLogo、VendorLogo、CustomerLogo,其中 owner_id 引用相关的 Manager.id、Vendor.id 和 Customer.id ?

  2. 向 Logo 添加其他字段(例如,ENUM type='manager' | 'vendor' | 'customer')以启用将 owner_id 指向适当的模型。

  3. 另一种方法?

谢谢!

标签: database-designsequelize.jsrelational-database

解决方案


考虑到您的经理、供应商和客户实体都与用户实体相关,您也可以将徽标实体与用户实体相关联。

不要做你的第二选择。

编辑...

您可以logo_id在 Customer 或 Manager 表中放置一列,而不是customer_idmanager_idLogo 表中放置一列。您也可以logo_id在用户或供应商中放置一列。(这些logo_id值都应该可以为空。)这样您就可以为各种不同的目的创建相同类型的徽标,而不会使您的架构过于复杂。


推荐阅读