![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Заблокирован
Регистрация: 04.07.2011
Сообщений: 261
|
![]()
Вопросы по проектированию БД, подскажите, пожалуйста, что знаете:
Для какого кол-ва таблиц необходимо делать PrimaryKeys, ForeignKeys, Unique, Indecies? Например: 1) если таблица простой не редактируемый справочник вроде "валюты" или "типы документов" - нужны ли там PrimaryKey и проверка на уникальность названий? Нужны ли индексы? 2) если таблица является связью между двумя другими таблицами вида (T3_ID, T2_ID, T1_ID) нужно ли к двум другим делать ForeignKey? Нужно ли делать индексы? 3) насколько вообще часто имеет смысл делать ForeignKeys если политиками ролей, пользователей и интерфейсом уже невозможно удалить связанные данные? 4) в каких случаях имеет смысл создавать некие самодельные индексы отличающиеся от полей PK/FK/UNQ? 5) какое среднее соотношение таблиц/индексов? 1к4 нормально? или слишком много? 6) можно ли индексы называть в точности как называется поле по которому индекс работает? не создаст ли это ошибок? Индексы же вроде нигде в коде не запрашиваются по имени. 7) в FB/IBexpert можно создавать типы ошибок и выводимый текст, но для этого требуется создавать триггер, который будет перехватывать и показывать этот текст, может можно как-то заменить текст стандартных сообщений БД об ошибках? или как-то назначить на все попытки удаления связанных данных сразу ERR_MSG_1 ? 8) можно ли как-то заставить БД записывать автоматически timestamp при каждом Update записи (без дополнительных триггеров и процедур)? или может можно создавать некие триггеры на все одинаковые поля всей БД, которые бы сами обновляли их, без необходимости писать такой триггер для каждой таблицы? 9) как можно быстро перенести ХП из БД в тело программы? как правильно написать код FIBDataset.SelectSQL используя ХП из тела программы? |
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 23.04.2009
Сообщений: 1,058
|
![]()
1) ну PrimaryKey лучше делать всегда... или вы ссылаться из других таблиц на справочник будите по имени?
2,3) как хотите.... я реализую подобные вещи уже в своей программе 4,5,6) Индексы нужны для убыстрения поиска т.е. выполнения запросов select но они тормозят запросы update 7) может в программе просто исключение обрабатывать? 8) у поля есть дефолтное значение..если при insert о нём не чего не сказано. 9) select * from имя процедуры
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
|
![]() |
![]() |
![]() |
#3 |
Заблокирован
Регистрация: 04.07.2011
Сообщений: 261
|
![]()
1) ссылаться можно и без PK
![]() 7) можно, а в БД универсально по классам ошибок никак? 8) интересен не insert, а при update! 9) как сохранять ХП внутри программы Delphi, как ХП вызывать из текста-кода программы, как обращаться/передавать ХП - вот это всё поподробнее бы ![]() |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,528
|
![]()
надо исходить из правила БД вещь протяженная во времени (нюансы проекта забываются в документацию (даже если она есть) лезть не охота, с ролями при работе из IBexpert возиться лениво).
1-3 Защита и управление данными начинается с нижнего уровня (PK. FK + соответствующие (insert, delete) тригеры) их нельзя обойти, их можно только отключить. 1. через полтора года админ (ты) решил расширить нередактируемый справочник, но забыл про неявно подразумеваемую уникальность (или же просто ошибся при написании скрипта обновления) и .... (смотри пункт выше защита лишней не бывает). 4. если по этим полям активно идет поиск сортировка ХП ключевое слово хранимая. она хранится на сервере. В соответствующем SQL запросе из программы ее можно создать (перезоздать) (почти так же как и в IBexpert)
программа — запись алгоритма на языке понятном транслятору
|
![]() |
![]() |
![]() |
#5 | ||
Заблокирован
Регистрация: 04.07.2011
Сообщений: 261
|
![]()
4. Ясно, про защиту понятно, спасибо!
Остальное конечно хотелось бы поподробнее ![]() Цитата:
![]() ![]() Цитата:
![]() |
||
![]() |
![]() |
![]() |
#6 | ||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,528
|
![]() Цитата:
ее (ХП) не надо хранить в программе, ее надо использовать. (вызывать) dв программе. Цитата:
программа — запись алгоритма на языке понятном транслятору
|
||
![]() |
![]() |
![]() |
#7 |
Заблокирован
Регистрация: 04.07.2011
Сообщений: 261
|
![]()
Ну надо мне так, ну что тут поделаешь! :D
Как Execute block? Я просто с этим не сталкивался и литературы на эту тему не нашёл в инете... плохо себе представляю как правильно программе хранить большие ХП из БД и вызывать тоже? |
![]() |
![]() |
![]() |
#8 |
Заблокирован
Регистрация: 04.07.2011
Сообщений: 261
|
![]()
Вопросы 8-9 не ясны, кто-нить может подсказать???
|
![]() |
![]() |
![]() |
#9 |
Заблокирован
Регистрация: 04.07.2011
Сообщений: 261
|
![]()
......up.......
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Литература и прочие материалы по проектированию | Квэнди | Общие вопросы по программированию, компьютерный форум | 20 | 02.04.2024 09:40 |
Компоненты для игр в Билдере; + пара вопросов по проектированию. | Гром | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 9 | 30.01.2010 15:56 |
Контрольная работа по проектированию информационных систем | tanushkaroganova | Фриланс | 1 | 26.10.2009 16:38 |