Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2012, 13:12   #1
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
Вопрос Вопросы по проектированию БД FB25

Вопросы по проектированию БД, подскажите, пожалуйста, что знаете:
Для какого кол-ва таблиц необходимо делать 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 используя ХП из тела программы?
delphicoding вне форума Ответить с цитированием
Старый 14.03.2012, 15:04   #2
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

1) ну PrimaryKey лучше делать всегда... или вы ссылаться из других таблиц на справочник будите по имени?
2,3) как хотите.... я реализую подобные вещи уже в своей программе
4,5,6) Индексы нужны для убыстрения поиска т.е. выполнения запросов select но они тормозят запросы update
7) может в программе просто исключение обрабатывать?
8) у поля есть дефолтное значение..если при insert о нём не чего не сказано.
9) select * from имя процедуры
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 14.03.2012, 16:35   #3
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

1) ссылаться можно и без PK
7) можно, а в БД универсально по классам ошибок никак?
8) интересен не insert, а при update!
9) как сохранять ХП внутри программы Delphi, как ХП вызывать из текста-кода программы, как обращаться/передавать ХП - вот это всё поподробнее бы
delphicoding вне форума Ответить с цитированием
Старый 14.03.2012, 17:47   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

надо исходить из правила БД вещь протяженная во времени (нюансы проекта забываются в документацию (даже если она есть) лезть не охота, с ролями при работе из IBexpert возиться лениво).

1-3 Защита и управление данными начинается с нижнего уровня (PK. FK + соответствующие (insert, delete) тригеры) их нельзя обойти, их можно только отключить.

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

4. если по этим полям активно идет поиск сортировка

ХП ключевое слово хранимая. она хранится на сервере. В соответствующем SQL запросе из программы ее можно создать (перезоздать) (почти так же как и в IBexpert)
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 14.03.2012, 18:35   #5
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

4. Ясно, про защиту понятно, спасибо!
Остальное конечно хотелось бы поподробнее в частности имеет ил какой-либо смысл FK кроме вопроса защиты? нужен ли PK для примитивных не редактируемых справочников типа "виды валют" коих 5шт всего... ???
Цитата:
(смотри пункт выше защита лишней не бывает).
С одной стороны я тоже так подумал и забацал везде всё что можно, в лучшем виде. А вот теперь задумался - не станет ли от всех этих PK,FK,UNQ тормозить... выражаясь твоими словами "через протяжённое время"?

Цитата:
ХП ключевое слово хранимая. она хранится на сервере. В соответствующем SQL запросе из программы ее можно создать (перезоздать) (почти так же как и в IBexpert)
"Хоть горшком назови" суть вопроса - как правильно перенести код ХП в программу и затем использовать при запросах?? Если можно поподробнее, пожалуйста...
delphicoding вне форума Ответить с цитированием
Старый 14.03.2012, 18:51   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
как правильно перенести код ХП в программу
код процедур Windows API ты тоже перносишь в свою программу?
ее (ХП) не надо хранить в программе, ее надо использовать. (вызывать) dв программе.
Цитата:
9) select * from имя процедуры
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 14.03.2012, 19:21   #7
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

Ну надо мне так, ну что тут поделаешь! :D

Как Execute block? Я просто с этим не сталкивался и литературы на эту тему не нашёл в инете... плохо себе представляю как правильно программе хранить большие ХП из БД и вызывать тоже?
delphicoding вне форума Ответить с цитированием
Старый 16.03.2012, 11:37   #8
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

Вопросы 8-9 не ясны, кто-нить может подсказать???
delphicoding вне форума Ответить с цитированием
Старый 21.03.2012, 13:03   #9
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

......up.......
delphicoding вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Литература и прочие материалы по проектированию Квэнди Общие вопросы по программированию, компьютерный форум 19 15.02.2024 07:30
Компоненты для игр в Билдере; + пара вопросов по проектированию. Гром Gamedev - cоздание игр: Unity, OpenGL, DirectX 9 30.01.2010 15:56
Контрольная работа по проектированию информационных систем tanushkaroganova Фриланс 1 26.10.2009 16:38