Является ли созданная строка времени уникальным в таблице?
Я знаю, что отметка времени - это момент времени на данный момент.
Но, подходя к моему столу, мой стол не имеет первичного ключа.
Поэтому мне нужен уникальный столбец для транзакций.
Должен ли я взять строку созданный столбец отметки времени имеет уникальный столбец таблицы.
Определение таблицы
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 ответа
Нет. Обычно вы не можете быть уверены, что нет двух строк, которые приходят в одно и то же время.
Было бы более критично, если вы используете транзакции, в которых все строки фиксируются одновременно. Эта скрипка показывает, что метки времени равны для двух строк: 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/)
Я не думаю, что было бы разумно просто с помощью create_time, потому что 2 разных порядка могут размещаться одновременно
я предпочитаю сочетание order_number,created_time
колонка для создания уникального