database-design - 关系数据库的理想数据模型
问题描述
我有 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。
什么被认为是合适的:
制作一个单独的 ManagerLogo、VendorLogo、CustomerLogo,其中 owner_id 引用相关的 Manager.id、Vendor.id 和 Customer.id ?
向 Logo 添加其他字段(例如,ENUM type='manager' | 'vendor' | 'customer')以启用将 owner_id 指向适当的模型。
另一种方法?
谢谢!
解决方案
考虑到您的经理、供应商和客户实体都与用户实体相关,您也可以将徽标实体与用户实体相关联。
不要做你的第二选择。
编辑...
您可以logo_id
在 Customer 或 Manager 表中放置一列,而不是customer_id
在manager_id
Logo 表中放置一列。您也可以logo_id
在用户或供应商中放置一列。(这些logo_id
值都应该可以为空。)这样您就可以为各种不同的目的创建相同类型的徽标,而不会使您的架构过于复杂。