|
Индексы в Visual FoxPro 6.0
|
|||
---|---|---|---|
#18+
Приветствую! Делаю лабораторные по Visual FoxPro 6.0 и у меня возникло несколько вопросов. Хочу уточнить, что делаю лабораторные я на 6-ом фоксе, а в институте мне дали книги по 7-му... Известно что поздние версии немного, но отличаются от ранних и вот из-за них-то порой и возникают маленькие нестыковки... Но это и необязательно так, но всё же... Итак, вопросы: 1. Скажите, пожалуйста, играет ли важную роль первичный ключ? В описании типов сказано, что таблица не может иметь более одного первичного ключа, а как их различать? Т.е. как понять, какой индекс является первичным ключом, а какой нет?... Из википедии я узнал, что первичный ключ в таблице является базовым уникальным идентификатором для записей. Значение первичного ключа используется везде, где нужно указать на конкретную запись. Он может состоять из единственного поля таблицы, значения которого уникальны для каждой записи. Так, например, на предприятии не может быть двух работников с одинаковыми табельными номерами, поэтому в таблице, содержащей записи о работниках, табельный номер может быть первичным ключом. Т.е., как я понимаю, поле, содержащее порядковый номер чего-либо и есть первичный ключ?... А если в одной БД хранятся "код методического пособия" и "код преподавателя", как у меня по заданию?... Это получается два первичных ключа? Тогда это противоречит закону... :) Или первичный ключ используется только если при этом хранятся данные о самом пособии или преподавателе?... У меня в таблице их нет... Значит первичного ключа в этом случае вообще не будет? Кроме "кода методического пособия" и "кода преподавателя" у меня ещё есть поля "дата выдачи пособия" и "количество выданных пособий"... 2. Скажите, пожалуйста, какую роль играет составной индекс и для чего он нужен?... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2009, 16:03 |
|
Индексы в Visual FoxPro 6.0
|
|||
---|---|---|---|
#18+
Сергун1. Скажите, пожалуйста, играет ли важную роль первичный ключ? В описании типов сказано, что таблица не может иметь более одного первичного ключа, а как их различать? Т.е. как понять, какой индекс является первичным ключом, а какой нет?... Из википедии я узнал, что первичный ключ в таблице является базовым уникальным идентификатором для записей. Значение первичного ключа используется везде, где нужно указать на конкретную запись. Он может состоять из единственного поля таблицы, значения которого уникальны для каждой записи. Так, например, на предприятии не может быть двух работников с одинаковыми табельными номерами, поэтому в таблице, содержащей записи о работниках, табельный номер может быть первичным ключом. Википедия правильно пишет СергунТ.е., как я понимаю, поле, содержащее порядковый номер чего-либо и есть первичный ключ?... А если в одной БД хранятся "код методического пособия" и "код преподавателя", как у меня по заданию?... Это получается два первичных ключа? Тогда это противоречит закону... :) Или первичный ключ используется только если при этом хранятся данные о самом пособии или преподавателе?... У меня в таблице их нет... Значит первичного ключа в этом случае вообще не будет? Кроме "кода методического пособия" и "кода преподавателя" у меня ещё есть поля "дата выдачи пособия" и "количество выданных пособий"... Первичный ключ относится к таблице, а не ко всей БД. Разные таблицы в БД имеют разные первичные ключи. Это вопросы больше по теории реляционных БД. В двух словах это сложно объяснить. Не знаю какие у тебя книги, но смотри начало - где про 1,2,3 нормальные формы, и т.п. Обычно во всех книгах по СУБД есть немного теории. Типы ключей это теория, а индекс это способ реализации ключей в фоксе. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2009, 16:56 |
|
Индексы в Visual FoxPro 6.0
|
|||
---|---|---|---|
#18+
Сергун1. Скажите, пожалуйста, играет ли важную роль первичный ключ? Если вы говорите об индексе типа Primary, то для FoxPro он нужен только на этапе проектирования базы данных. Т.е. факт наличия такого индекса облегчает процесс разработки приложения. При собственно работе приложения уже почти никакой роли не играет. Единственное, что работает в приложении - это контроль уникальности значения. Но это может сделать и индекс типа Candidad. СергунВ описании типов сказано, что таблица не может иметь более одного первичного ключа, а как их различать? Т.е. как понять, какой индекс является первичным ключом, а какой нет?... Если открыть таблицу на модификацию, то на закладке Index в столбце Type будет указано слово Primary. А в различных дизайнерах такой индекс выделяется жирным шрифтом и слева от его имени стоит символ ключа. СергунИз википедии я узнал, что ... Вы путаете понятия "первичного ключа" и индекса типа Primary. Под термином "первичный ключ", как правило, понимается некий уникальный идентификатор записи. Т.е. это такое поле или набор полей по значению которого можно однозначно идентифицировать запись в таблице. Разные записи не могут иметь одно и то же значение в этом поле. Получается, зная значение этого ключа мы можем однозначно определить о какой записи идет речь. Как правило, по этому полю строится индекс. Вот и получается, что "первичный ключ" - это как бы "два-в-одном": собственно поле, содержащее идентификатор записи и индекс, контролирующий уникальность записанного значения. Хотя наличие индекса и не обязательно. В качестве идентификатора записи может выступать некое значение, формируемое вне базы данных. Например, тот же табельный номер. В этом случае подобные идентификаторы называют "естесственными ключами". Если же идентификатор формируется исключительно внутри базы данных, то такой идентификатор называется "суррогатным ключем". В идеале, желательно, чтобы в таблице присутствовали как "естесственные", так и "суррогатные" ключи. Суррогатный ключ используется для организации целостности базы данных (настройки связей между таблицами), а естесственные - для идентификации записи пользователем (пользователь ищет запись по этому значению) Однако естесственного ключа может и не быть. Или же он уникален, но при определенных условиях. Например, тот же табельный номер, но только для не уволенных работников. Именно поэтому, суррогатный (искуственный) ключ лучше всего создавать для всех таблиц без исключения. А придавать ли ему статус "естесственного" (т.е. видимого для пользователя) решается в каждом конкретном случае индивидуально. Сергун2. Скажите, пожалуйста, какую роль играет составной индекс и для чего он нужен?... Если вам надо упорядочить записи по нескольким полям одновременно. Например, сначала по дате, а в пределах одинкового значения даты по номеру. Однако на практике, проще сделать выборку с нужной сортировкой. Составные индексы в таблицах, по возможности, лучше не использовать. Несколько устарело, однако можете почитать еще здесь Индекс ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2009, 18:01 |
|
Индексы в Visual FoxPro 6.0
|
|||
---|---|---|---|
#18+
Dima TПервичный ключ относится к таблице, а не ко всей БД. Разные таблицы в БД имеют разные первичные ключи.Прошу прощения, но мне хотелось бы уточнить. Чтобы не возникало разногласий, приложу файлы БД и индексы, которые я сделал на данный момент... У меня в каждой БД одна таблица... А можно сделать и несколько таблиц в одной БД?... ВладимирМ , большое спасибо за подробный ответ, но я хочу напомнить, что я работаю в Visual FoxPro 6.0, а в нем ещё не предусмотрен тип индекса Primary. Руководствовался я книгой С.А. Каратыгина, А.Ф. Тихонова, Л.Н. Тихоновой - "Visual FoxPro 7. Руководство пользователя с примерами", где на странице 113 есть пример создания первичного ключа, а на странице 114 - создание составного индекса. ВладимирМЕдинственное, что работает в приложении - это контроль уникальности значения. Но это может сделать и индекс типа Candidad.Этот индекс называется Candidate... И сколько я не читал описание типов индексов, большого различия я так и не ощутил... ВладимирМЕсли открыть таблицу на модификацию, то на закладке Index в столбце Type будет указано слово Primary. А в различных дизайнерах такой индекс выделяется жирным шрифтом и слева от его имени стоит символ ключа.В Visual FoxPro 6.0 ничего подобного нету... На основе вышесказанного хочу спросить, стоит ли мне обращать внимание на первичный ключ, т.к. я считаю, что в Visual FoxPro 6.0 ничего этого ещё не предусмотрено?... ВладимирМОднако на практике, проще сделать выборку с нужной сортировкой. Составные индексы в таблицах, по возможности, лучше не использовать.По заданию мне его нужно использовать... Хочу опубликовать свои труды, чтобы как-то опустить несогласованность версий... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2009, 10:26 |
|
Индексы в Visual FoxPro 6.0
|
|||
---|---|---|---|
#18+
Насколько я понял, первичный ключ имеет место с индексом типа Primary, а раз в Visual FoxPro 6.0 этот тип отсутствует, то и не стоит забивать голову этим термином?... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2009, 10:31 |
|
Индексы в Visual FoxPro 6.0
|
|||
---|---|---|---|
#18+
Вы что-то путаете индекс типа primary в фоксе был всегда. Просто фокс по умолчанию создает candidate. После создания тип индекса можно поменять в редакторе таблиц ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2009, 10:42 |
|
Индексы в Visual FoxPro 6.0
|
|||
---|---|---|---|
#18+
СергунНасколько я понял, первичный ключ имеет место с индексом типа Primary, а раз в Visual FoxPro 6.0 этот тип отсутствует, то и не стоит забивать голову этим термином?... А вот это Вы зря так думаете... Все-таки возьмите-ка книжку по теории реляционных баз данных (например, Кодд "Введение в системы Баз данных") и прочитайте про первичный и внешний ключи, ссылочную целостность и т.д. Вам это Dima T. уже советовал... Прочищает мозги и ставит их на место! Но это теория, абстракция... Реализация же может быть на нее и не похожа. При большом желании первичные ключи и контроль ссылочной целостности можно организовать даже на FохPro/DOS, где эти "фичи" не включены в ядро СУБД и надо постоянно "изобретать велосипед"... :-( ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2009, 11:54 |
|
Индексы в Visual FoxPro 6.0
|
|||
---|---|---|---|
#18+
Эх смешались в кучу кони-люди ... Вы путаете понятия БД и таблица. То что вы прислали - набор Free table. Отсюда и отсутствие Primary индексов. Под базой данной в фокспро подразумеваеться набор таблиц , включенных в спец контейнер. Создайте проект , в нем на вкладке Data создайте БД и уже в ней создавайте/добавляйте таблицы. Использование такого контейнера дает больше возможностей . Более подробно- почитайте в книге. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2009, 12:13 |
|
Индексы в Visual FoxPro 6.0
|
|||
---|---|---|---|
#18+
Начните отсюда: Советы начинающим Часть I. Расположение файлов проекта, Базы данных Советы начинающим Часть II. Таблица, Курсор, Поля, Ключевое поле Советы начинающим Часть III. Индексы Советы начинающим Часть IV. Типы, Удаление, Хранимые процедуры, Связи Советы начинающим Часть V. Триггер, Rule, Default, Дизайн полей, Директивы прекомпилятора Это все писалось как раз на основе VFP6SP5. С небольшими вставками по более поздним версиям (до VFP8). Там самое начало каждого раздела о том, что именно подразумевается под тем или иным терминами. Кстати, книги Каратыгина с Тихоновами советую читать предельно осторожно. Это группа халтурщиков, которые когда-то давно написали книжку, кажется по VFP5, а потом просто меняли циферку в заголовке, почти ничего не меняя в содержании. Так все ошибки и опечатки плавно переезжали в очередное переиздание. По VFP6 попробуйте найти книги Род Пэддок и др.: Visual FoxPro 6.0 Разработка корпоративных приложений - это попытка уместить все в одном "флаконе". Правда, объем "флакона" маловат оказался. Здесь всего по чуть-чуть: чуть-чуть описания интерфейса, чуть-чуть истории и идеологии программирования, чуть-чуть примеров программ. М. Базиян и др.: Visual FoxPro 6.0 Специальное издание - это пересказ HELP, но более полно и с меньшим количеством ошибок, чем это делают отечественные авторы Правда, тираж этих книг уже закончился и Вы вряд ли сможете их купить, несмотря на то, что ссылки на них в интернет-магазинах по-прежнему есть. Нельзя сказать, что эти книги лишены недостатков, но они значительно лучше книг отечественных авторов. Книга Базияна есть в интеренте в свободном доступе, правда, на английском языке А вообще-то, можете взять книгу и по более поздним версиям FoxPro. Поскольку FoxPro поддерживает обратную совместимость, то особых проблем не будет. Кстати, есть ссылки на подобные книги в интеренте. В смысле, почитать можно. Только, опять же, читайте по принципу "доверяй, но проверяй". Для справки: Понятие "Контейнер базы данных" (файл DBC) было введено в версии VFP3. Индекс типа Primary можно создать только у таблиц, включенных в контейнер базы данных. О чем, кстати, написано в статье по индексам по приведенной ранее ссылке. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2009, 20:45 |
|
Индексы в Visual FoxPro 6.0
|
|||
---|---|---|---|
#18+
ВладимирМ, подскажите структуру команды, открывающей таблицу и каким образом в программе выполняется копирование записей из одной таблицы в другую, синтаксис этих команд. Заранее спасибо:):):) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2009, 17:44 |
|
Индексы в Visual FoxPro 6.0
|
|||
---|---|---|---|
#18+
Тамара К.ВладимирМ, подскажите структуру команды, открывающей таблицу и каким образом в программе выполняется копирование записей из одной таблицы в другую, синтаксис этих команд. Заранее спасибо:):):) USE - открыть/закрыть таблицу APPEND FROM - добавить в текущую из указанной INSERT-SQL - вставить в указанную таблицу результат выборки из другой COPY TO - создать новую таблицу как копию текущей Select-SQL - формирует выборку из таблицы, результат которой может быть записан в новую таблицу через опцию INTO ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2009, 20:57 |
|
|
start [/forum/topic.php?fid=41&msg=35836276&tid=1586437]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 358ms |
total: | 497ms |
0 / 0 |