sql >> データベース >  >> RDS >> PostgreSQL

Postgresの主キーであるパー​​ツ(注文番号)を更新します

    私は別のアプローチを選択します。部品番号を永続化する代わりに、順序を永続化します パーツの:

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

    入力される最初の部分は、part_orderを取得します 0.0の。最初または最後にパーツを追加する場合は、part_orderに割り当てるだけです。 以前の最小値または最大値より1.0少ないまたは多い。 2つの既存のパーツの間にパーツを挿入する場合は、part_orderを割り当てます。 これは、隣接するパーツの算術平均です。

    例:

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

    実際の部品番号は、テーブルをクエリするときに計算されます:

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

    その利点は、パーツを追加または削除するときに多くの行を更新する必要がないことです。



    1. GROUP BY内でLIMITを使用して、グループごとにN個の結果を取得しますか?

    2. mysqlでデータベースを復元する方法は?

    3. SQL Serverで、dateTime範囲が別の範囲と重複しているかどうかを確認するにはどうすればよいですか?

    4. MySQLのリスト文字列から単一のアイテムを取得します