PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Numery seryjne na grupę wierszy dla klucza złożonego

Nie. Próbowano go wiele razy i jest to uciążliwe.

Użyj zwykłego serial lub IDENTITY kolumna:

  • Automatyczna inkrementacja kolumny tabeli
CREATE TABLE address_history (
  address_history_id serial PRIMARY KEY
, person_id int NOT NULL REFERENCES people(id)
, created_at timestamp NOT NULL DEFAULT current_timestamp
, previous_address text
);

Użyj funkcji okna row_number() aby uzyskać numery seryjne bez przerw na person_id . Możesz utrwalić VIEW które możesz wykorzystać jako zamiennik dla swojej tabeli w zapytaniach, aby przygotować te liczby:

CREATE VIEW address_history_nr AS
SELECT *, row_number() OVER (PARTITION BY person_id
                             ORDER BY address_history_id) AS adr_nr
FROM   address_history;

Zobacz:

  • Sekwencja bez luk, w której zaangażowanych jest wiele transakcji z wieloma tabelami

Lub możesz chcieć ORDER BY coś innego. Może created_at ? Lepiej created_at, address_history_id zerwać ewentualne więzi. Powiązana odpowiedź:

  • Kolumna z alternatywnymi serialami

Ponadto typ danych, którego szukasz, to timestamp lub timestamptz , a nie datetime w Postgresie:

  • Całkowite ignorowanie stref czasowych w Rails i PostgreSQL

Musisz tylko przechowywać previous_address (lub więcej szczegółów), a nie address ani original_address . Oba byłyby zbędne w normalnym modelu danych.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak pobrać kolumnę Postgres bytea jako plik?

  2. Jak wyświetlić numery wierszy w zapytaniu PostgreSQL?

  3. Konwertuj datę na dzień juliański w PostgreSQL

  4. Tabela jako argument funkcji PostgreSQL

  5. Powstrzymaj PostgreSQL od wyboru złego planu zapytań