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

Perbarui bagian (nomor pesanan) yang merupakan kunci utama di Postgres

Saya akan memilih pendekatan yang berbeda. Alih-alih mempertahankan nomor bagian, pertahankan pesanan bagian:

CREATE TABLE book_part (
   book_id bigint NOT NULL,
   part_order real NOT NULL,
   name text NOT NULL,
   PRIMARY KEY (book_id, part_order)
);

Bagian pertama yang dimasukkan mendapat part_order dari 0,0. Jika Anda menambahkan bagian di awal atau akhir, Anda cukup menetapkan ke part_order 1,0 kurang atau lebih dari minimum atau maksimum sebelumnya. Jika Anda menyisipkan bagian di antara dua bagian yang ada, Anda menetapkan part_order itu adalah rata-rata aritmatika dari bagian yang berdekatan.

Contoh:

-- insert the first part

INSERT INTO book_part VALUES (1, 0.0, 'Introduction');

-- insert a part at the end

INSERT INTO book_part VALUES (1, 1.0, 'Getting started with PostgreSQL');

-- insert a part between the two existing parts

INSERT INTO book_part VALUES (1, 0.5, 'The history of PostgreSQL');

-- adding yet another part between two existing parts

INSERT INTO book_part VALUES (1, 0.25, 'An introductory example');

Nomor bagian sebenarnya dihitung saat Anda menanyakan tabel:

SELECT book_id,
       row_number() OVER (PARTITION BY book_id ORDER BY part_order) AS part,
       name
FROM book_part;

Kelebihannya adalah Anda tidak perlu memperbarui banyak baris saat menambahkan atau menghapus bagian.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgresql, pilih bidang kosong

  2. Tentang indeks berkerumun di postgres

  3. Doktrin - Tambahkan cap waktu default ke entitas seperti SEKARANG ()

  4. Batasan kunci asing yang kompleks di SQLAlchemy

  5. Stempel waktu putaran Postgresql ke 30 detik terdekat