Должен ли я назначать первичный ключ для каждой таблицы в ORM? [Дубликат]

В настоящее время API-интерфейс Firebase Storage отсутствует для отображения всех файлов в папке. Если вам нужна такая функциональность, вы должны хранить метаданные файлов (например, URL-адреса загрузки) в том месте, где вы можете их перечислить. База данных реального времени Firebase идеально подходит для этого и позволяет вам также легко делиться URL-адресами с другими.

Вы можете найти хороший (но несколько включенный) образец этого в нашем Приложение FriendlyPix . Соответствующий код для веб-версии - здесь , но есть также версии для iOS и Android.

277
задан Pure.Krome 29 May 2009 в 13:46
поделиться

13 ответов

Короткий ответ: да.

Длинный ответ:

  • Вам нужно, чтобы ваша таблица была присоединена к чему-то
  • Если вы хотите, чтобы ваша таблица кластеризовать, вам нужен какой-то первичный ключ.
  • Если вашему дизайну таблицы не нужен первичный ключ, переосмыслите свой дизайн: скорее всего, вам что-то не хватает. Зачем хранить одинаковые записи?

В MySQL механизм хранения InnoDB всегда создает первичный ключ, если вы не указали его явно, что делает дополнительный столбец, к которому у вас нет доступа.

Обратите внимание, что первичный ключ может быть составным.

Если у вас есть таблица ссылок «многие ко многим», вы создаете первичный ключ во всех полях, связанных с ссылкой. Таким образом, вы гарантируете, что у вас нет двух или более записей, описывающих одну ссылку.

Помимо проблем логической согласованности, большинству двигателей RDBMS будет полезно включить эти поля в уникальный индекс.

И поскольку любой первичный ключ включает создание уникального индекса, вы должны объявить его и получить как логическую согласованность, так и производительность.

См. Эту статью в своем блоге, почему вы всегда должны создавать уникальный индекс по уникальным данным:

PS Есть некоторые очень, очень специальные случаи, когда вам не нужен первичный ключ.

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

259
ответ дан Randy Marsh 5 September 2018 в 08:10
поделиться

Хорошая практика иметь ПК на каждом столе, но это НЕ ДОЛЖНО. Скорее всего, вам понадобится уникальный индекс и / или кластерный индекс (который является PK или нет) в зависимости от ваших потребностей.

Ознакомьтесь с разделами первичных ключей и кластеризованных индексов в электронной документации по электронной почте (для SQL Server )

" Ограничения PRIMARY KEY определяют столбец или набор столбцов, которые имеют значения, которые однозначно идентифицируют строку в таблице. Нет двух строк в таблице, которые могут иметь одно и то же значение первичного ключа. введите NULL для любого столбца в первичном ключе. Мы рекомендуем использовать в качестве первичного ключа небольшой целочисленный столбец. Каждая таблица должна иметь первичный ключ. Столбец или комбинация столбцов, которые квалифицируются как значение первичного ключа, упоминаются как кандидат ключ. "

Но затем проверьте это также: http://www.aisintl.com/case/primary_and_foreign_key.html

5
ответ дан endo64 5 September 2018 в 08:10
поделиться

Вам понадобится присоединиться к этой таблице в других таблицах? Вам нужен способ однозначно идентифицировать запись? Если ответ «да», вам нужен первичный ключ. Предположим, что ваши данные - это что-то вроде таблицы клиентов, в которой есть имена людей, которые являются клиентами. Не может быть никакого естественного ключа, потому что вам нужны адреса, электронные письма, телефонные номера и т. Д., Чтобы определить, отличается ли эта Салли Смит от этой Салли Смит, и вы будете хранить эту информацию в связанных таблицах, поскольку у человека могут быть многолюдные телефоны, дополнения , электронные письма и т. д. Предположим, что Салли Смит выходит замуж за Джона Джонса и становится Салли Джонс. Если у вас нет искусственного ключа на столе, когда вы обновляете имя, вы просто сменили 7 Салли Смитса на Салли Джонс, хотя только один из них женился и изменил свое имя. И, конечно, в этом случае с искусственным ключом, как вы знаете, что Салли Смит живет в Чикаго и кто живет в Лос-Анджелесе?

Вы говорите, что у вас нет естественного ключа, поэтому у вас нет никаких комбинаций

Я нашел в любое время, когда у меня нет естественного ключа, искусственный ключ является абсолютной необходимостью для поддержания целостности данных. Если у вас есть естественный ключ, вы можете использовать это как ключевое поле. Но лично, если только естественный ключ не является одним полем, я по-прежнему предпочитаю искусственный ключ и уникальный индекс на естественном ключе. Вы пожалеете об этом позже, если не поместите его.

7
ответ дан HLGEM 5 September 2018 в 08:10
поделиться

За исключением нескольких очень редких случаев (возможно, таблица отношений «многие ко многим» или таблица, которую вы временно используете для массовой загрузки огромных объемов данных), я бы пошел со словами:

Если у него нет первичного ключа, это не таблица!

Marc

11
ответ дан marc_s 5 September 2018 в 08:10
поделиться

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

6
ответ дан raphaëλ 5 September 2018 в 08:10
поделиться

Короче говоря, нет. Однако вам нужно иметь в виду, что для этого требуются операции CRUD для доступа к клиенту. Для будущей проверки я обычно использую первичные ключи.

1
ответ дан Rich.Carpenter 5 September 2018 в 08:10
поделиться

У меня всегда есть первичный ключ, даже если вначале у меня нет цели, но для него. Было несколько раз, когда мне в конечном итоге нужна ПК в таблице, у которой ее нет, и ее всегда больше беспокоит. Я думаю, что есть больше возможностей для того, чтобы всегда включать один.

2
ответ дан rvarcher 5 September 2018 в 08:10
поделиться

Если вы используете Hibernate, невозможно создать Entity без первичного ключа. Эти проблемы могут создать проблему, если вы работаете с существующей базой данных, которая была создана с помощью простых сценариев sql / ddl, и никакой первичный ключ не был добавлен

1
ответ дан Schildmeijer 5 September 2018 в 08:10
поделиться

Я занимаюсь поддержкой приложения, созданного командой разработчиков в оффшорных зонах. Теперь у меня возникают всевозможные проблемы в приложении, потому что исходная схема базы данных не содержала PRIMARY KEYS в некоторых таблицах. Поэтому, пожалуйста, не позволяйте другим людям страдать из-за вашего плохого дизайна. Всегда полезно иметь первичные ключи на таблицах.

1
ответ дан Shiva 5 September 2018 в 08:10
поделиться

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

2
ответ дан StewNoble 5 September 2018 в 08:10
поделиться

Я знаю, что для использования определенных функций gridview в .NET вам нужен первичный ключ, чтобы gridview знал, какая строка нуждается в обновлении / удалении. Общая практика должна состоять в том, чтобы иметь первичный ключ или кластер первичного ключа. Я лично предпочитаю первое.

3
ответ дан Tacoman667 5 September 2018 в 08:10
поделиться

Практически в любое время, когда я создал таблицу без первичного ключа, думая, что мне это не понадобится, я вернулась и добавила ее. Теперь я создаю даже мои таблицы соединений с автоматически сгенерированным полем идентификации, которое я использую в качестве первичного ключа.

11
ответ дан tvanfosson 5 September 2018 в 08:10
поделиться
Другие вопросы по тегам:

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