![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 22.09.2008
Сообщений: 214
|
![]()
Здравствуйте. Я не могу разобраться, что такое первичный ключ, внешний ключ и индексы, для чего они нужны и какая между ними разница? Объясните, пожалуйста.
|
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 06.06.2007
Сообщений: 282
|
![]()
http://lessons-tva.info/edu/e-inf2/m2t4.html
3. Ключи. Ключ – это столбец (может быть несколько столбцов), добавляемый к таблице и позволяющий установить связь с записями в другой таблице. Существуют ключи двух типов: первичные и вторичные или внешние. Первичный ключ – это одно или несколько полей (столбцов), комбинация значений которых однозначно определяет каждую запись в таблице. Первичный ключ не допускает значений Null и всегда должен иметь уникальный индекс. Первичный ключ используется для связывания таблицы с внешними ключами в других таблицах. Внешний (вторичный) ключ - это одно или несколько полей (столбцов) в таблице, содержащих ссылку на поле или поля первичного ключа в другой таблице. Внешний ключ определяет способ объединения таблиц. Из двух логически связанных таблиц одну называют таблицей первичного ключа или главной таблицей, а другую таблицей вторичного (внешнего) ключа или подчиненной таблицей. СУБД позволяют сопоставить родственные записи из обеих таблиц и совместно вывести их в форме, отчете или запросе. Существует три типа первичных ключей: ключевые поля счетчика (счетчик), простой ключ и составной ключ. Поле счетчика (Тип данных «Счетчик»). Тип данных поля в базе данных, в котором для каждой добавляемой в таблицу записи в поле автоматически заносится уникальное числовое значение. Простой ключ. Если поле содержит уникальные значения, такие как коды или инвентарные номера, то это поле можно определить как первичный ключ. В качестве ключа можно определить любое поле, содержащее данные, если это поле не содержит повторяющиеся значения или значения Null. Составной ключ. В случаях, когда невозможно гарантировать уникальность значений каждого поля, существует возможность создать ключ, состоящий из нескольких полей. Чаще всего такая ситуация возникает для таблицы, используемой для связывания двух таблиц многие - ко - многим. Необходимо еще раз отметить, что в поле первичного ключа должны быть только уникальные значения в каждой строке таблицы, т.е. совпадение не допускается, а в поле вторичного или внешнего ключа совпадение значений в строках таблицы допускается.
Не важно, как часто вы падаете. Важно, как часто вы поднимаетесь. Винс Ломбарди.
|
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 06.06.2007
Сообщений: 282
|
![]()
вот еще, там про индексы есть: http://www.codenet.ru/progr/vbasic/vb_db/1.php
Не важно, как часто вы падаете. Важно, как часто вы поднимаетесь. Винс Ломбарди.
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 22.09.2008
Сообщений: 214
|
![]()
Спасибо! Почитаю. Индекс нужен для быстрого поиска, а ключ, чтобы не было абсолютно одинаковых записей. Если я не прав, поправьте меня.
|
![]() |
![]() |
![]() |
#5 |
Участник клуба
Регистрация: 07.07.2007
Сообщений: 1,518
|
![]()
В общем, да, но лучше не увлекаться ключами и индесками. Имхо.
Для идентификации записи лучше сделать поле increment (напр. имя поля = id). Например, у меня есть два Иванова Ивана Ивановича, проживающего по одному адресу. Как их идентифицировать? Если по какому-то из полей есть ключ - при добавлении вылетит ошибка. А по id - без проблем. DELETE FROM TABLE WHERE ID=TABLEID.TEXT. Ошибки быть не может. А индекс нужен не столько для поиска - сколько для связи с другой таблицей. Функции GoToKey и GoToNearest - фуфло. К тому же требуют наличие индексированного поля. Locate() - индексированного поля не требует, но сделает переход к одной и той-же записи и не выведет список всего найденного. Вывод: используем sql-запросы. Последний раз редактировалось _SERGEYX_; 22.09.2008 в 21:34. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
ключи | veter_s_morya | SQL, базы данных | 1 | 30.06.2008 15:33 |
Надстрочные индексы в RichEdit | Serega_P | Общие вопросы Delphi | 4 | 20.06.2008 11:34 |
Индексы | AlexDoul | БД в Delphi | 12 | 24.11.2007 16:52 |
Индексы | Таня84 | БД в Delphi | 4 | 20.03.2007 14:09 |