Является ли созданная строка времени уникальным в таблице? - PullRequest
0 голосов
/ 27 сентября 2018

Я знаю, что отметка времени является моментом времени в данный момент.

Но, подходя к моей таблице, у моей таблицы нет первичного ключа.

Так что мне нужен уникальный столбецдля транзакций.

Должен ли я взять строку, созданную для столбца метки времени, с уникальным столбцом таблицы.

Определение таблицы

Create Table order_processing_logs(
    order_number integer,
    processing_status integer,
    cust_id character varying(200),
    vendor_id character varying(200),
    .
    .
    .
    .
    .
    .,etc,
    created_time timestamp without time zone DEFAULT now(),
    updated_time timestamp without time zone DEFAULT now()
); 

Должен ли я создать create_time как уникальный столбец в таблице.

Прямо сейчас, если я изменил архитектуру таблицы, это повлияет на миллионы записей.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Я не думаю, что было бы разумно просто использовать create_time, потому что 2 разных порядка могут быть размещены одновременно

Я предпочитаю комбинацию столбца order_number,created_time для создания уникального

0 голосов
/ 27 сентября 2018

Нет.Как правило, вы не можете быть уверены, что нет двух строк, приходящих в одно и то же время.

Было бы более критично, если вы используете транзакции , где все строки фиксируются в одно и то же время.время.Эта скрипка показывает, что временные метки равны для двух строк: demo: db <> fiddle

Возможно, вы могли бы использовать комбинацию из двух столбцов как

PRIMARY KEY (order_number, current_timestamp)

Нопоскольку вы не гарантируете уникальность каждого из столбцов (или их комбинации), вы никогда не будете в безопасности.


Всегда лучше добавить столбец с типом serial, который автоматически увеличивается(bigint) число.

Поскольку Postgres 10 , вы можете использовать GENERATE IDENTITY вместо serial типа:

id INT GENERATED ALWAYS AS IDENTITY

(http://www.postgresqltutorial.com/postgresql-identity-column/)

...