|
|
|
Обязательно ли во всех таблицах, входящих в БД, организовывать первичный ключ?
|
|||
|---|---|---|---|
|
#18+
У меня есть нормализованная БД: рабочий файл 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, чтобы изменения сохранились. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2006, 19:15 |
|
||
|
Обязательно ли во всех таблицах, входящих в БД, организовывать первичный ключ?
|
|||
|---|---|---|---|
|
#18+
Если такой вопрос вообще возник - то делай обязательно. Подобный вопрос свидетельствует о плохом понимании того, что такое первичный ключ и для чего он вобще нужен. Поэтому, чтобы не ломать голову, делай его ВО ВСЕХ таблицах. Нужно очень хорошо понимать, что именно и для чего ты делаешь, чтобы НЕ создавать первичный ключ. Т.е. вопрос должен ставиться наоборот. Первичный ключ должен быть везде, можно ли его вот здесь НЕ делать? Это как с нормализацией. Базы должны быть нормализованы. Отступление от нормализации делается для решения сугубо конкретных задач. Причем следует понимать, что таким отступлением ты создаешь себе дополнительные проблемы по поддержанию целостности базы данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2006, 21:18 |
|
||
|
Обязательно ли во всех таблицах, входящих в БД, организовывать первичный ключ?
|
|||
|---|---|---|---|
|
#18+
Коль LV без него не работает, как следует, то я ввел этот первичный ключ по неиспользуемому мною полю idmoney в таблице money. Но вопрос: "Зачем все-таки он нужен в дочернем файле?" остался. Мне он представляется излишеством. В чем практическая польза уникальной нумерации каждой выплаты в money? Ну, разве, что: 1. для вывода в порядке обратном вводу? 2. для синхронизации перемещения курсора в LV и соответствующей ему таблице или ее буфере? 3. или для унификации решения каких-то внутренних задач при реализации представления? Больше я ничего не придумал... Но в последнем случае Фокс и сам бы мог сгенерировать некий виртуальный первичный ключ, не утруждая пользователя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2006, 04:00 |
|
||
|
Обязательно ли во всех таблицах, входящих в БД, организовывать первичный ключ?
|
|||
|---|---|---|---|
|
#18+
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 делаешь выборку из этой таблицы. КАК сопоставить записи исходной таблицы и результирующей выборки? Т.е. что вот эта запись исходной таблицы соответствует вот этой записи результирующей выборки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2006, 10:44 |
|
||
|
Обязательно ли во всех таблицах, входящих в БД, организовывать первичный ключ?
|
|||
|---|---|---|---|
|
#18+
В дополнении к тому, что сказал Владимир... Предствьте себе гипотетическую ситуацию - Вы получили данные с серврера, обновили их и послали назад... Как сервер поймет, какую ему запись обновлять? То есть надо что-то, что определяло бы данную запись однозначно не зависимо от ее содержания, так как в момент обновления Вы все можете поменять... Вот для этого и служит первичный ключ, который лучше всего делать "суррогатным" или "лишенным смысла" в FoxPro он становится индексом для ускорения работы (поиска нужной записи)... Good luck! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2006, 12:24 |
|
||
|
|

start [/forum/topic.php?fid=41&fpage=272&tid=1592256]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
18ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
26ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 309ms |

| 0 / 0 |
