PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cập nhật phần (số đơn hàng) là khóa chính trong Postgres

Tôi sẽ chọn một cách tiếp cận khác. Thay vì duy trì số bộ phận, hãy duy trì đơn đặt hàng của các bộ phận:

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

Phần đầu tiên được nhập sẽ nhận được một part_order của 0,0. Nếu bạn thêm một phần vào đầu hoặc cuối, bạn chỉ cần gán cho part_order Thấp hơn hoặc nhiều hơn 1,0 so với mức tối thiểu hoặc tối đa trước đó. Nếu bạn chèn một phần vào giữa hai phần hiện có, bạn chỉ định một part_order đó là trung bình cộng của các phần liền kề.

Ví dụ:

-- 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');

Số phần thực tế được tính khi bạn truy vấn bảng:

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

Cái hay của điều đó là bạn không cần phải cập nhật nhiều hàng khi thêm hoặc xóa một phần.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để xác định ngày cuối cùng của tháng trước bằng PostgreSQL?

  2. Thay đổi nhóm bảo mật trên Phiên bản cơ sở dữ liệu AWS RDS

  3. Đưa đầu ra từ Postgres \ i đầu vào vào một tệp?

  4. NHẬN CHẨN ĐOÁN với câu lệnh SAO CHÉP trong hàm Pl / pgsql

  5. 7 cách tìm hàng trùng lặp trong PostgreSQL khi bỏ qua khóa chính