Обновление 01/02
Пожалуйста, смотрите скриншот.Я сократил приложение до 2 таблиц: Адреса и Пользователи.
Запуск sequelize db: миграция с миграциями / моделями ниже создает дополнительную таблицу «пользователей».Смотрите раздел каталога.При нажатии на всплывающее сообщение «пользователи» «Таблица, которую вы пытаетесь редактировать, является заглушкой только для модели, созданной для представления отсутствующих внешних таблиц, на которые ссылаются внешние ключи.»
На диаграмме нет дополнительных «пользователей».Таблица.Не устанавливается соединение для Addresses.userId с Users.id, как это должно быть.
У кого-нибудь есть мысли по поводу того, почему или как это исправить?
- Работа в Macbook OS X10.14.2
- Версия Sequelize: Sequelize CLI [Узел: 10.7.0, CLI: 5.4.0, ORM: 4.42.0]
- Версия сервера MySql: 8.0.13
- Версия MySql Workbench также: 8.0.13
![MySql Workbench shows extra 'users' table](https://i.stack.imgur.com/x3K6A.png)
Обновление 12/30
В MySql Workbench Database> Reverse Engineer отображает диаграмму таблиц, но линии внешнего / первичного ключа не отображаются.Механизм БД - InnoDB.
Я использую миграцию / модели Sequelize для создания БД и связей.Например, таблица «Адреса» имеет внешний ключ «userId» для таблицы «Пользователи».
В разделе таблиц «Каталог» схемы EER каким-то образом есть таблица «Пользователи» и таблица «пользователи».Внешний ключ Addresses.userId указывает на таблицу 'users' в нижнем регистре, таблицу, которая не должна существовать.Таблица в нижнем регистре не отображается ни на диаграмме, ни в списке таблиц БД в разделе схемы, она появляется только в разделе таблиц каталога.
Также есть две другие пары таблиц: свойство / свойство,PropertyClass / PropertyClass.Ни в одной другой таблице нет дубликатов.У пользователей и PropertyClasses есть объединенная таблица UserPropertyClasses.
Есть идеи, почему это может происходить или как это предотвратить?
Версия сиквелиза: Sequelize CLI [Node: 10.7.0, CLI: 5.4.0, ORM: 4.42.0]
Версия сервера MySql: 8.0.13
Версия MySql Workbench также: 8.0.13
Вот модель адреса:
'use strict';
module.exports = (sequelize, DataTypes) => {
const Address = sequelize.define('Address', {
userId: {
type: DataTypes.INTEGER,
validate: {
notNull: true
}
},
street1: {
type: DataTypes.STRING,
validate: {
notEmpty: true
}
}
}, {
paranoid: true
});
Address.associate = function(models) {
Address.belongsTo(models.User, {
as: 'user',
foreignKey: 'userId'
})
}
return Address;
};
Вот миграция адресов:
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('Addresses', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
userId: {
allowNull: false,
type: Sequelize.INTEGER,
references: {
model: 'Users',
key: 'id'
}
},
street1: {
allowNull: false,
type: Sequelize.STRING(50)
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
},
deletedAt: {
allowNull: true,
defaultValue: null,
type: Sequelize.DATE
}
})
.then(async () => {
return await Promise.all([
queryInterface.addIndex('Addresses', [ 'userId' ]),
])
});
}
Модель пользователя:
'use strict';
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define('User', {
firstname: {
type: DataTypes.STRING,
validate: {
notEmpty: true
}
}
}, {
paranoid: true
});
User.associate = function(models) {
User.hasOne(models.Address, {
as: 'address',
foreignKey: 'userId'
})
};
return User;
};
Вот миграция пользователя:
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('Users', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
firstname: {
allowNull: false,
type: Sequelize.STRING(50)
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
},
deletedAt: {
allowNull: true,
defaultValue: null,
type: Sequelize.DATE
}
})
.then(async () => {
return await Promise.all([
queryInterface.addIndex('Users', [ 'firstname' ]),
]);
})
}