Как Вы определяете то, что должно быть первичным ключом?

При выполнении платформы на 64 бита, Вы видели бы x86_64 или что-то очень похожее в выводе от , uname-a

Для получения определенного аппаратного названия машины работает

uname -m

, можно также звонить

getconf LONG_BIT

, который возвращается или 32 или 64

7
задан vehomzzz 13 August 2009 в 15:03
поделиться

14 ответов

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

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

Могу ли я иметь две строки с одинаковыми MANUFACTURER_NAME, MODEL_NAME и RELEASE_YEAR одновременно? Хммм нет. Это не имело бы смысла, это была бы одна и та же модель автомобиля, а мне нужна только одна запись на модель автомобиля. Отлично, это ключ.

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

Ужасно Изменения со временем !!! (суррогатные ключи, естественный ключ, медленно меняющиеся размеры)

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

Хорошо, я добавлю новый столбец «MODEL_ID» и сделаю его первичным ключом таблицы, чтобы я мог хранить несколько записей с одним и тем же названием модели, названием производителя и годом выпуска. Я также добавлю метки времени valid_from и valid_to.

Это может работать хорошо, и действительно, с моими изменениями первичным ключом таблицы теперь является MODEL_ID, суррогатный ключ. Но естественный ключ, бизнес-ключ, ключ «в любой момент времени» - это все еще имя_модели, имя_производителя и год_ выпуска, и я не могу упустить это из виду.

Примечание о суррогатных ключах :

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

Если бы мы сказали, что каждому человеку в Австралии будет назначен Stack_Overflow_User_id, что бы мы сделали, когда Джефф и Джоэл начали давать Stack_Overflow_User_Id собакам и кошкам и несколько идентификаторов одним и тем же людям?

Мы бы сказали: «Привет, Джефф и Джоэл, выдавайте только 1 идентификатор для каждого имени, фамилии, даты_ рождения и места_ рождения!». *

Нам нужно знать естественный ключ, иначе мы можем дать суррогатный ключ чему угодно!

(* как насчет людей, у которых все одинаковы? Нам нужен номер паспорта или какой-то суррогат? На практике суррогат - это красиво и чисто, но откуда он взялся? изначально он произошел от естественного ключа.)

5
ответ дан 6 December 2019 в 05:55
поделиться

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

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

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

0
ответ дан 6 December 2019 в 05:55
поделиться

Думайте об этом как о возможном уникальном идентификаторе (один или несколько столбцов) для ваших записей.

Подумайте о отпечатках пальцев. Считаете ли вы, что они уникальны для человека? это еще не было доказано, но, несомненно, он кажется достойным уникальным идентификатором до тех пор, пока популяция не станет настолько большой, что закрадывается избыточность. В настоящее время это как первичный ключ для записей, которые идентифицируют вас. [1 столбец]

В случае, если наша популяция резко увеличится и отпечатки пальцев начнут показывать свои слабые места, мы можем объединить отпечатки пальцев и сканирование радужной оболочки глаза, чтобы получить гораздо более надежный первичный ключ. [2 столбца]

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

По крайней мере, я надеюсь, что это помогает с концепцией.

0
ответ дан 6 December 2019 в 05:55
поделиться

Теоретически можно использовать любое уникальное поле (например, номер социального страхования, URL-адрес и т. Д.), Но на практике я не думаю, что использование автоматически сгенерированного идентификатора является большим недостатком. Например, из-за какой-то дурацкой ошибки дублирование SSN может иметь катастрофические последствия для ваших данных.

0
ответ дан 6 December 2019 в 05:55
поделиться

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

0
ответ дан 6 December 2019 в 05:55
поделиться

Когда я использую суррогатные ключи, мне кажется, что производительность увеличивается. Обычно для производительности я использую Int ID.

1
ответ дан 6 December 2019 в 05:55
поделиться

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

Я не согласен с вашей точкой зрения, что все идентификаторы должны иметь какое-то отношение к таблице, потому что иногда этого недостаточно, чтобы однозначно идентифицировать запись. Кроме того, вам придется использовать несколько идентификаторов, с которыми гораздо труднее работать, чем с простым текущим номером в качестве идентификатора.

Первичные ключи относительно просты для отдельных таблиц, но если ваши записи распределены по нескольким таблицам, вещи может запутаться, особенно при подключении "много-много".

1
ответ дан 6 December 2019 в 05:55
поделиться

Вы, конечно, сначала об этом гуглили, верно? Я вижу, что первые всплывающие у меня результаты с правильным определением первичного ключа также содержат примеры.

  • http://en.wikipedia.org/wiki/Unique_key
  • http: //databases.about. com / cs / administrator / g / primarykey.htm
  • http://msdn.microsoft.com/en-us/library/ms191236.aspx
    и т. д.
  • 2
    ответ дан 6 December 2019 в 05:55
    поделиться

    Ключ должен быть столбцом, в котором каждая запись гарантированно уникальна. Примерами могут быть такие вещи, как номер социального страхования или номер водительского удостоверения. Теоретически вы можете связать несколько столбцов в составной ключ. Так что, возможно, имя и день рождения могут быть уникальными вместе, поэтому они могут быть ключом. Однако на практике этого никто не делает, потому что пересечение таблиц - это боль. Лучшим решением обычно является добавление автоматически увеличивающегося значения или столбца GUID.

    2
    ответ дан 6 December 2019 в 05:55
    поделиться

    Вы выбираете все, что, как вы знаете, будет уникальным значением, предпочтительно что-то числовое, например идентификатор клиента или номер счета. По возможности держитесь подальше от строковых ключей. В противном случае используйте значение GUID или целое число с автоматическим приращением.

    3
    ответ дан 6 December 2019 в 05:55
    поделиться
    3
    ответ дан 6 December 2019 в 05:55
    поделиться

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

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

    12
    ответ дан 6 December 2019 в 05:55
    поделиться

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

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

    1
    ответ дан 6 December 2019 в 05:55
    поделиться

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

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

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

    1
    ответ дан 6 December 2019 в 05:55
    поделиться
    Другие вопросы по тегам:

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