PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Sekuel hasMany, milik, atau keduanya?

Menggunakan belongsTo mendefinisikan kepemilikan model terkait. Untuk menjelaskan ini secara lebih rinci saya akan merujuk pada contoh yang dikutip dari tutorial

Project.hasMany(Task);
Task.belongsTo(Project);

Misalnya Anda tidak lagi tertarik dengan tugas proyek yang dihapus. Dalam hal ini Anda harus menghapus tugas secara manual, jika Anda tidak mendefinisikan belongsTo asosiasi. belongsTo menetapkan kepemilikan proyek atas tugas-tugasnya dan database akan secara otomatis menghapus tugas-tugas milik proyek yang dihapus juga. Ini disebut cascading delete dan dapat menghubungkan beberapa tabel.

Jika Anda menjalankan cuplikan kode berikut

const Project = sequelize.define('project', {
    name: Sequelize.STRING
});
const Task =  sequelize.define('task', {
    name: Sequelize.STRING
});
Project.hasMany(Task);
Task.belongsTo(Project);

dalam skrip sekuel dan lihat hasilnya

Executing (default): DROP TABLE IF EXISTS `projects`;
Executing (default): CREATE TABLE IF NOT EXISTS `projects` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` VARCHAR(255), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL);
Executing (default): PRAGMA INDEX_LIST(`projects`)
Executing (default): DROP TABLE IF EXISTS `tasks`;
Executing (default): CREATE TABLE IF NOT EXISTS `tasks` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` VARCHAR(255), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, `projectId` INTEGER REFERENCES `projects` (`id`) ON DELETE SET NULL ON UPDATE CASCADE);

Anda akan melihat perilaku berjenjang diatur dalam pembuatan tabel tugas.

Begitu banyak yang dikatakan, jawaban akhirnya adalah:itu tergantung. Penggunaan belongsTo bisa sangat berguna atau akan berakibat fatal jika Anda lebih suka menyimpan tugas proyek yang dihapus. Hanya gunakan belongsTo jika masuk akal dalam konteks aplikasi Anda.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menyetel kinerja Postgresql dan penggunaan memori dalam alur kerja python

  2. Nama database postgresql Heroku

  3. STRING_AGG() Fungsi di PostgreSQL

  4. Sinkronkan elasticsearch pada koneksi dengan database - nodeJS

  5. JPA menghasilkan kunci duplikat