PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

अद्यतन भाग (आदेश संख्या) जो पोस्टग्रेज में प्राथमिक कुंजी है

मैं एक अलग दृष्टिकोण चुनूंगा। भाग संख्या को बनाए रखने के बजाय, आदेश को जारी रखें भागों में से:

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 पिछले न्यूनतम या अधिकतम से कम या अधिक। यदि आप दो मौजूदा भागों के बीच एक भाग सम्मिलित करते हैं, तो आप एक part_order assign असाइन करते हैं यह आसन्न भागों का अंकगणितीय माध्य है।

एक उदाहरण:

-- 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. भौतिक विचारों को ताज़ा करें:संगामिति, लेन-देन संबंधी व्यवहार

  2. PostgreSQL में किसी तालिका के स्कीमा विवरण को क्वेरी करें?

  3. विशिष्ट तत्व के लिए JSONB सरणी अद्यतन

  4. sqlalchemy postgresql शून्य सूचकांक है

  5. स्क्वील अनुरोध और हरोकू, पोस्टग्रेज:ग्रुप बाय और ऑर्डर का उपयोग करने में त्रुटि