powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Обязательно ли во всех таблицах, входящих в БД, организовывать первичный ключ?
6 сообщений из 6, страница 1 из 1
Обязательно ли во всех таблицах, входящих в БД, организовывать первичный ключ?
    #33564780
men dea
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня есть нормализованная БД:

рабочий файл money: idKADR, dDATE, nSUMMA и справочниками:
fio: idFIO (primary key)
otdel: idOTDEL (primary key)
kadr: idOTDEL (primary key), idKADR (primary key), idFIO (regular key)

Смысл состоит в сборе денег (nSUMMA) помесячно по каждому idFIO во всех местах его работы.
Я делаю LV, через которое работаю с данными по money. Но время от времени у меня вылетает сообщение о "неуникальности" ключа в money. А там, как видно из структуры, нет требований по этой уникальности. Вот, и возникает вопрос, нужно ли ввести некий ключ типа idMONEY, чтобы эту уникальность создать?

Или проблема в LV? На закладке Update Criteria для Send SQL Updates обязательно нужно указать галку для первичного ключа, иначе изменения не попадут в таблицу money. А если в money нет первичного ключа, тогда что? Вот, и приходится ставить галку на любое из полей money, чтобы изменения сохранились.
...
Рейтинг: 0 / 0
Обязательно ли во всех таблицах, входящих в БД, организовывать первичный ключ?
    #33564841
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если такой вопрос вообще возник - то делай обязательно. Подобный вопрос свидетельствует о плохом понимании того, что такое первичный ключ и для чего он вобще нужен. Поэтому, чтобы не ломать голову, делай его ВО ВСЕХ таблицах.

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

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

Это как с нормализацией. Базы должны быть нормализованы. Отступление от нормализации делается для решения сугубо конкретных задач. Причем следует понимать, что таким отступлением ты создаешь себе дополнительные проблемы по поддержанию целостности базы данных.
...
Рейтинг: 0 / 0
Обязательно ли во всех таблицах, входящих в БД, организовывать первичный ключ?
    #33564953
men dea
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коль LV без него не работает, как следует, то я ввел этот первичный ключ по неиспользуемому мною полю idmoney в таблице money.
Но вопрос: "Зачем все-таки он нужен в дочернем файле?" остался.
Мне он представляется излишеством. В чем практическая польза уникальной нумерации каждой выплаты в money?
Ну, разве, что:
1. для вывода в порядке обратном вводу?
2. для синхронизации перемещения курсора в LV и соответствующей ему таблице или ее буфере?
3. или для унификации решения каких-то внутренних задач при реализации представления? Больше я ничего не придумал...

Но в последнем случае Фокс и сам бы мог сгенерировать некий виртуальный первичный ключ, не утруждая пользователя.
...
Рейтинг: 0 / 0
Обязательно ли во всех таблицах, входящих в БД, организовывать первичный ключ?
    #33565175
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
men deaКоль LV без него не работает, как следует, то я ввел этот первичный ключ по неиспользуемому мною полю idmoney в таблице money.
Но вопрос: "Зачем все-таки он нужен в дочернем файле?" остался.
Если бы ты еще и объяснил, а что это за файл такой. Как в нем поддерживается актуальность данных. Как организованно поддержание ссылочной целостности.

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

men deaМне он представляется излишеством.
Это значит, что ты по прежнему не понимаешь назначение первичного ключа. Не применительно к Local View. А вообще. В любой таблице.

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

men deaВ чем практическая польза уникальной нумерации каждой выплаты в money?
Еще раз. Не "нумерации", и идентификации . Это "две большие разницы"! Первичный ключ - это вовсе не обязательно число. Это может быть набор любых символов.

men deaНу, разве, что:
1. для вывода в порядке обратном вводу?
Ни в коем случае. Уникальный идентификатор записи служит только и исключительно для однозначной идентификации записи. Для целей сортировки вводи дополнительное поле.

men dea2. для синхронизации перемещения курсора в LV и соответствующей ему таблице или ее буфере?
Local View - это ОТДЕЛЬНАЯ (другая) таблица. Каким образом FoxPro должен определять, что вот эта запись Local View соответствует вот этой записи исходной таблицы? Т.е. как он должен идентифицировать записи? Только по значению ключевого поля.

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

men dea3. или для унификации решения каких-то внутренних задач при реализации представления? Больше я ничего не придумал...

Но в последнем случае Фокс и сам бы мог сгенерировать некий виртуальный первичный ключ, не утруждая пользователя.
А теперь попробуй придумать как это сделать. Т.е. есть исходная таблица. При помощи команды Select-SQL делаешь выборку из этой таблицы. КАК сопоставить записи исходной таблицы и результирующей выборки? Т.е. что вот эта запись исходной таблицы соответствует вот этой записи результирующей выборки.
...
Рейтинг: 0 / 0
Обязательно ли во всех таблицах, входящих в БД, организовывать первичный ключ?
    #33565402
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В дополнении к тому, что сказал Владимир...

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

Good luck!
...
Рейтинг: 0 / 0
Обязательно ли во всех таблицах, входящих в БД, организовывать первичный ключ?
    #33565415
5631
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что не нужно сейчас, очень может пригодиться потом. А будет поздно...
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Обязательно ли во всех таблицах, входящих в БД, организовывать первичный ключ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]