sql >> Databáze >  >> RDS >> PostgreSQL

Aktualizujte část (číslo objednávky), která je primárním klíčem v Postgresu

Zvolil bych jiný přístup. Místo zachování čísla dílu ponechte objednávku z dílů:

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

První část, která bude zadána, dostane part_order 0,0. Pokud přidáte součást na začátek nebo konec, přiřadíte ji pouze do part_order 1,0 méně nebo více než předchozí minimum nebo maximum. Pokud vložíte díl mezi dva existující díly, přiřadíte part_order to je aritmetický průměr sousedních částí.

Příklad:

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

Skutečné číslo dílu se vypočítá při dotazu na tabulku:

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

Výhodou je, že při přidávání nebo odstraňování součásti nemusíte aktualizovat mnoho řádků.



  1. Jak importovat výpis MySQL z příkazového řádku S přepsáním

  2. Jaké zdroje existují pro ladění výkonu databáze?

  3. Omezení klauzule IN na serveru SQL Server

  4. Jak spustit psql interaktivní v jeho docker kontejneru?