Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.11.19;
Скачать: [xml.tar.bz2];

Вниз

Преемственность данных и суррогатные ключи   Найти похожие ветки 

 
kaif ©   (2006-09-20 13:14) [0]

Создаю новую систему на основе Firebird на базе старой FoxPro. Данные чрезвычайно ценные и их следует перекачивать в новую систему.
Данные в старой системе не имеют суррогатных ключей - все ключи предметные (коды). Причем юзеры отчасти привыкли к этим кодам.
Я лично сторонник суррогатных ключей, особенно обеспечивающих связи между таблицами.
Но переход на суррогаты вызывает определенные трудности и замедления при перекачке данных из старой системы.

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

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


 
Sergey13 ©   (2006-09-20 13:35) [1]

На прошлой работе система была построена таким образом, что практически обязательно, наряду с сурогатным ИД в каждой таблице был был и альтернативный ключ (те же коды, которые надо поддерживать со времен царя Гороха). Все связи строились по сурогатам, а поиски по альтернативным. Все достаточно удобно.
Я к тому, что одно другому не мешает.


 
Anatoly Podgoretsky ©   (2006-09-20 13:39) [2]

Зачем же ты изначально хочешь помучаться? Оставь как есть.


 
alehan ©   (2006-09-20 13:55) [3]

У меня была аналогичная ситуация, в фоксе в каждой таблице был первичный ключ типа char(8), сгенерированный, на сколько я понял, случайными данными. Хотя некоторые были и осмысленные.

Перенёс как есть, работало нормально через BDE несколько лет. (Ключ брался из генератора cast(gen_id(gen_name,1) as char(8))

Потом, когда переходил на FIBPlus - сделал ключи целочисленными. Чтоб FIBPlus сам мог генерить sql-запросы на update/insert/delete. Т.ч. лучше немного попариться.


 
xayam ©   (2006-09-20 14:16) [4]


> kaif ©   (20.09.06 13:14)  

когда-то этот вопрос называли религиозным, использовать СК или ЕК, я всегда использую СК, а тем более раз переезжаешь на новую бд


 
ANB ©   (2006-09-20 14:19) [5]


> kaif ©   (20.09.06 13:14)

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


 
Val ©   (2006-09-20 15:59) [6]

>Причем юзеры отчасти привыкли к этим кодам.
А вы не показывайте им суррогатные, если решите перейти.


 
kaif ©   (2006-09-20 16:01) [7]

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


 
kaif ©   (2006-09-20 16:08) [8]

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

Иначе я бы и не сомневался. Я сегда использую суррогаты.


 
Sergey13 ©   (2006-09-20 16:19) [9]

> Например, существуют дубликаты и потерянные ссылки, которые
> я могу выявить лишь после закачки очередной таблицы SQL-
> запросами.

Почему их нельзя выявить в исходной БД теми же запросами?


 
Val ©   (2006-09-20 16:22) [10]

>kaif ©   (20.09.06 16:08)
нарушенная целостность - это отделный вопрос от данного топика.
чем мешают новые ключи - не очень ясно.
при перекачке добавляете новые поля для пк,  генератором создаете новые ид, пишите их кроме самих таблиц еще и в соотв. таблицы-перекодировщики вида OldID|NewID...
решаете проблему ссылочной целостности, создаете внешние ключи...
из-за чего топик-то, если вы все-равно собираетесь менять ключи?


 
Anatoly Podgoretsky ©   (2006-09-20 16:49) [11]

kaif ©   (20.09.06 16:01) [7]
Я не склоняюсь в данном случае, но если хочешь, то придется на период перевода завести таблицы соответствия.


 
Desdechado ©   (2006-09-20 17:20) [12]

Обычно при всяких конвертациях я формирую файлы отсевов, куда складываются записи, не прошедшие по каким-то причинам в БД.
Причины могут быть разные - неверный формат, незаполненность полей, отсутствие необходимых ссылок на справочники и т.п.
Попытки конвертации итерационные, т.е. сконвертили, посмотрели отсев и что осталось. Не понравилось, разбираемся с исходными данными, понравилось - заканчиваем. Отсев менее 2-3% - это нормально, ибо меньше добиться можнотолько огромными рудозатратами, проще вбить по новой,  но уже правильно.
Говорю, как человек, написавший около 20 различных конвертилок разных БД (в которых десятки таблиц).
Суррогатные ключи обязательны, причем сразу.


 
ANB ©   (2006-09-20 17:38) [13]


> Отсев менее 2-3%

Гы гы. Я пробил себе отсев в 10%. И за поправку данных скриптами мне потом заказчики отдельно коньяк таскали :)


 
kaif ©   (2006-09-20 18:03) [14]

Нужные мне SQL-запросы по старой базе невозможны, так как ADO не может объединять, сравнивая "бинарные" строки с нормальными integer-ами, а в базе полно таких связей. Поэтому приходится разбираться по очереди с каждой таблицей после пробной закачки.

Desdechado ©   (20.09.06 17:20) [12]
Говорю, как человек, написавший около 20 различных конвертилок разных БД (в которых десятки таблиц).
Суррогатные ключи обязательны, причем сразу


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


 
Neo Trinitron ©   (2006-09-20 18:18) [15]

Кто-нибудь может кратко рассказать чем это таким сурогатные ключи хороши?


 
ANB ©   (2006-09-20 18:31) [16]


> Neo Trinitron ©   (20.09.06 18:18) [15]
> Кто-нибудь может кратко рассказать чем это таким сурогатные
> ключи хороши?

Ничем они не хороши, но намного лучше естественных.


 
Neo Trinitron ©   (2006-09-20 18:37) [17]

> Ничем они не хороши, но намного лучше естественных.

Чем, например?


 
Val ©   (2006-09-20 18:41) [18]

как минимум тем, что не будет соблазна их изменять.


 
Desdechado ©   (2006-09-20 18:50) [19]

Neo Trinitron ©   (20.09.06 18:37) [17]
1. Естественные имеют тенденцию по заранее неизвестному принципу становиться неуникальными.
2. Если естественные многопольные (а обычно так и есть), то геморрой по  поддержке в БД ссылочной целостности сравним только с непрерывной диареей.
3. Суррогатные традиционно числовые, а это намного быстрее в БД, чем непонятно что натуральное.


 
Johnmen ©   (2006-09-20 20:36) [20]

Есть статья на ibase.ru про Суррогатные ключи vs Натуральные. Полезно ознакомиться...

>kaif ©  

Я за суррогатные. Везде и сразу...:)


 
Petr V. Abramov ©   (2006-09-21 01:11) [21]

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

перегони в FB данные as is, а потом, имея нормальный SQL, реши проблему.
Так же приходилось качать из Pidarox в Oracle. И в FB еще сделай всяческие проверки на целкостность и непротиворечивость.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2006.11.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.056 c
15-1161803262
vidiv
2006-10-25 23:07
2006.11.19
Про то же переименовывание...


15-1162213237
GanibalLector
2006-10-30 16:00
2006.11.19
PortMon -> Error : 2


15-1161393307
Gero
2006-10-21 05:15
2006.11.19
Новая версия DMClient, клиента для этого форума


2-1162356010
APiC
2006-11-01 07:40
2006.11.19
Регистрация расширений


15-1162553454
Сергей М.
2006-11-03 14:30
2006.11.19
AdAstra Trace Mode 6





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский