Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Упаковка для большого кол-ва маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
Есть несколько сотен dbf-файлов которые необходимо залить в базу и затем использовать как справочники. Записей в них от двух до тысячи, структура различная. В будущем будут появляться новые dbf и модифицироваться существующие. Вопрос в том, как их хранить в базе. У меня такие варианты: 1. Залить все как есть, 300 файлов - 300 таблиц. Такой вариант мне нравится меньше всего, хотя кажется наиболее рациональным для хранения и доступа к данным. 2. Конвертировать в три таблицы Код: plaintext 1. 2. 3. 4. и при доступе преобразовывать из текста в необходимый тип (для типа можно четвертую таблицу создать) Количество таблиц существенно уменьшилось, но про рациональность говорить не приходится. 3. Создать штук 7 таблиц для основных типов Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Если Вы решали подобные задачи - поделитесь пожалуста соображениями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2004, 15:49 |
|
||
|
Упаковка для большого кол-ва маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
А данные у тя как используются потом и БД какая?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2004, 16:00 |
|
||
|
Упаковка для большого кол-ва маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
Oracle 9 Это справачные таблицы. Например в основной таблице поле KV - код валюты Код: plaintext 1. 2. 3. 4. 5. 6. 7. В справачной таблице соответственно записи Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2004, 16:09 |
|
||
|
Упаковка для большого кол-ва маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
Справочник можно описать такой структурой: create Table Dict( DictNo int, Key char(10), Text char(300) ) DictNo - номер справочника Key - ключ Text - текстовое значение для ключа Залей дбф-ы в эту таблицу ( те, которые подходят по структуре) Те, что не подходят - в отдельные таблицы. PS:Можно в Dict добавить еще пару полей Attrib1, Attrib2....- тогда дбф-ов больше можно будет "подогнать" по структуре. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2004, 06:27 |
|
||
|
Упаковка для большого кол-ва маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
Где-то 60% этих dbf имеют уникалиную структуру. У 10% действительно структура идентичная. "Подогнать" по структуре ряд таблиц возможно, но при этом конечно получим гораздо больший объем, чем мог бы быть в действительности. Даже если все это проделать и превратить 300 таблиц в 30 - врядли получится убедить разработчиков пользоваться такой структурой хранения, так как нет четкого алгоритма поиска конкретного справочника. -Где находится справочник такой-то ? -Где-то в одной из этих 30 таблиц, поищите. Да, можно создать 300 wiev, каждая из которых будет соответствовать dbf-у, но тогда это просто усложненный вариант моего способа 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2004, 14:41 |
|
||
|
Упаковка для большого кол-ва маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
2 zayac А теперь попробуй напиши foreign key с рабочей таблицы на какой-либо справочник (валюту, например). в вар 2 и 3 не получится - будешь извращаться программно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2004, 15:46 |
|
||
|
Упаковка для большого кол-ва маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
Хорошее замечание. Я об этом думал и пришел к выводу, что лучше наверное действительно где-то делать програмно, где-то не делать вообще. Что такое foreign key? Это индекс плюс тригер. Тригер. Так как рабочая таблица как правило имеет не одно поле из справочников, а несколько, то в принципе при обычной работе проблем быть не должно, но при массовых insert, update рабочей таблицы будет серьезное падение производительности. Или отключать все соответствующие тригеры, а после insert, update включать снова. Плюс создание нескольких сотен дополнительных объектов в базе скорости не прибавит. Индекс. Для каждого индекса будет выделен экстент, который в большинстве случаев будет заполнен лишь на несколько процентов - не рациональное использование дискового пространства. Хорошо, с этим можно мириться, но ведь эти индексы в большинстве случаев не будут использоваться! Осуществлять сканирование индекса, а потом поиск по таблице менее выгодно чем полное сканирование таблицы из пары сотен записей. В моем случае лишь несколько таблиц достигают тысячи записей. Поправте меня, если я ошибаюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2004, 17:22 |
|
||
|
Упаковка для большого кол-ва маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
> -Где находится справочник такой-то ? > -Где-то в одной из этих 30 таблиц, поищите. Храни в этой же таблице "справочник справочников". Навскидку, 2 варианта 1) зарезервировать DictNo = 0 - это будет справочник справочников insert into Dict select 0, 1, 'справочник валют' ... insert into Dict select 1, 1, 'рубль' 2) Добавляем в Dict еще одно поле RecType - тип записи Если RecType = 1, то запись обычная (строка справочника) Если RecType = 0, то запись хранит название справочника Тогда: "Где находится справочник такой-то ? " select DictNo, Text from Dict where RecType = 0 create Table Dict( DictNo int, RecType int, Key char(10), Text char(300) ) DictNo - номер справочника RecType Key - ключ Text - текстовое значение для ключа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2004, 08:40 |
|
||
|
Упаковка для большого кол-ва маленьких таблиц
|
|||
|---|---|---|---|
|
#18+
Я подобное видел, для трудноформализованных структур придумали XML, я предложу разновидность базы данных для хранения XML, адаптированую для данного случая: имеется таблицы справочники dictionary элементы element строковые атрибуты StrAttribut числовые атрибуты NumAttribut Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. Это версия для SQL сервера В эти 3 таблицы можно запихнуть справочники ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2004, 10:43 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=32430402&tid=1546578]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
84ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 11ms |
| total: | 192ms |

| 0 / 0 |
