172 похожих чатов

Подскажите, пожалуйста. У меня есть 3 колонки, в которой значения

могут быть не уникальны, но комбинация значений этих трёх колонок уникальна. Вопрос:
1) Я могу сделать колонку ID - primary key, простой инкримент. А на эти 3 повесить Unique constraint
2) Могу сделать составной Primary key на эти 3 колонки.
Как правильно будет сделать? По логике/производительности.
Сложно сказать редкие ли инсерты, но апдейты и селекты гораздо чаще. Одну из этих 3ёх колонок хочу индексировать, так как по ней часто идут селекты

9 ответов

26 просмотров

Напиши не рандомный, а последовательный генератор данных и посмотри на количествах 100000-500000 записей

Есть дополнительные вопросы: 1) Будут ли у этой таблицы подчиненные таблицы? 2) будут ли апдейты затрагивать значения этих 3 полей, комбинация которых уникальна?

Gamer's Diary Project- Автор вопроса
Юра
Есть дополнительные вопросы: 1) Будут ли у этой та...

1) По идеи нет, её только будут джоинить 2) Нет, они по сути ключ - если один раз занеслась комбинация, то обновляются только другие поля, относящиеся к этой комбинации

Gamer's Diary Project
1) По идеи нет, её только будут джоинить 2) Нет, о...

Если есть 100% уверенность в том, что у этой таблицы не будет подчиненных таблиц, и структура таблицы не будет меняться (а это очень смелые предположения), то можно все три поля ввести в первичный ключ. Если же есть сомнения, то лучше все же создать синтетический ключ в виде автоикрементного ID, а на те три поля наложить индекс unique

Юра
Если есть 100% уверенность в том, что у этой табли...

Никто не мешает потом синтетический unique-констрейнт на вновь добавленном автоинкрементном поде добавить. Гораздо более важна такая штука: могут ли у трёх вышеобозначенных полей быть null-овые значения? Если да, то во-первых, вариант с составным primary key отпадает, а во-вторых, возможно надо будет строить уникальный индекс на с coalesce, т.к. null в любом из полей приводит к игнорированию дублей по двум другим полям.

Radist
Никто не мешает потом синтетический unique-констре...

В 14 если не ошибаюсь это можно побороть, явно указав как интерпретировать NULL

V K
В 14 если не ошибаюсь это можно побороть, явно ука...

Что-то я сходу в документации не нашел, есть только разные варианты match-ей для foreign key. Не подскажете более конкретно синтаксическую конструкцию или ссылку на доку?

V K
В 14 если не ошибаюсь это можно побороть, явно ука...

Я видел такое только в доках к бете 15-й версии: https://www.postgresql.org/docs/15/ddl-constraints.html Конструкция unique nulls distinct/not distinct

Nick Nalbantov
Я видел такое только в доках к бете 15-й версии: h...

да, вы правы - это я напутал, оно в было в бете к 15

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта