powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Целостность данных
12 сообщений из 12, страница 1 из 1
Целостность данных
    #34067334
Alexey123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делаю небольшую базу данных, но с сложной бизнесс логикой, и следовательно ограничениями на данные (например фиксироваться документ об оплате для слушателя одного вуза может только в виде плаётжного поручения, для другого только в виде квитанции..... невозможно зарегистрировать слушателя невыставив ему счёт (исключение: форма оплаты бесплатно и взаимозачёт) и т.д.) Подскажите на каком уровне (тригеры, хранимые процедуры, клиентское приложение) лучше реализовывать эти ограничения. Сейчас я пишу тригеры, но если всё эти ограничения ещё раз проверять в хранимых процедурах (добавления, удалия данных) которые будет вызывать клиенское приложение потребуется много времени, или достаточно только тригеров и констраитов..?
...
Рейтинг: 0 / 0
Целостность данных
    #34067514
Серж
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не нужно фанатично использовать только одно средство. По обстоятельствам нужно. Плюс -- насколько "по-взрослому" должно быть все сделано. Например, если поле принимает только значение от 10 до 100, то можно просто на клиенте при вводе фильтровать. А если думать о будущем, то лучше еще и constraint прописать. Тогда даже обновляя таблицы вручную UPDATE'ом нельзя будет "испортить" данные.
Триггерами лучше обновлять кумулятивные данные, например сумму в "шапке" документа обновлять через триггер, повешенный на "строки" документа.
Сложные проверки, типа "если вася пришел на работу пьяный, но принес с собой много пива и шеф в команлдировке, то банкет продалжается.... если вася пришел трезвый с пивом, то..." конечно же делать надо в хранимках. ИМХО снаружи должны быть видны только хранимки, чтобы все выполнялось через них, а не на прямую с таблицами.
Многие проверки будут дублироваться на сервере и на клиенте. Проверки на сервере будут ганатировать логическую целостность данных, проверки на клиенте будут упрощать работу пользователя.
...
Рейтинг: 0 / 0
Целостность данных
    #34067633
Alexey123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СержИМХО снаружи должны быть видны только хранимки, чтобы все выполнялось через них, а не на прямую с таблицами. Имеется ввиду только изменение и модификация данных? Выборку данных я хотел организовать через представления (за исключением совсем простых запросов к таблицам) , а выборку с параметрами через функции(т.е. создать параметризированое представление)

P.S. спасибо за ответ
...
Рейтинг: 0 / 0
Целостность данных
    #34068329
Серж
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey123Имеется ввиду только изменение и модификация данных?
Не только. Если по таблицам и столбцам можно каждому юзеру разрешить/запретить выполнять select/update, то по строкам этого не сделать. Следовательно грамотный пользователь откроет какой-нибудь query analyzer, сделает select из всей таблицы. Что дальше он будет делать с этой информацией не знаю. Может в налоговую понесет ;)
Чтобы такого не происходило нужно и чтение организовать либо через view (что не всегда возможно), либо через хп.
...
Рейтинг: 0 / 0
Целостность данных
    #34068613
Alexey123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как вы относитесь к использованию табличных функций в качестве параметризированных представлений? Соит их использовать или лучше создавать просто view и уже из него делать нужную выборку (в этом случае есть возможность создать индекс)
...
Рейтинг: 0 / 0
Целостность данных
    #34069120
Серж
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что такое Alexey123табличных функций в качестве параметризированных представлений?
...
Рейтинг: 0 / 0
Целостность данных
    #34069376
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey123А как вы относитесь к использованию табличных функций в качестве параметризированных представлений? Соит их использовать или лучше создавать просто view и уже из него делать нужную выборку (в этом случае есть возможность создать индекс) 1 в теории табличные функции (inline, не multistatement, это важно) успешно обрабатываются оптимизатором и вообще при разработке как раз и назывались параметризированные view. Функциями их назвали перед выходом 2000 сервера.

2 на практике у нас был один проект, где inline табл. функции использовались очень активно и были тормоза. Хочу подчеркнуть, что я не утверждаю, что тормоза были из-за функций, а не из-за кривизны рук, однако те же самые руки до этого сделали проект с массированным использованием view, и с производительностью все было ok.
...
Рейтинг: 0 / 0
Целостность данных
    #34069414
Alexey123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СержА что такое Alexey123табличных функций в качестве параметризированных представлений?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE TABLE tab1 (a INT, b INT)
GO
CREATE FUNCTION fc1 (@a INT)
RETURNS TABLE
AS
RETURN (SELECT *
	FROM tab1
	WHERE a=@a)
GO
INSERT tab1 VALUES ( 1 , 1 )
INSERT tab1 VALUES ( 1 , 10 )
INSERT tab1 VALUES ( 2 , 2 )
INSERT tab1 VALUES ( 2 , 20 )

SELECT *
FROM fc1( 2 )
...
Рейтинг: 0 / 0
Целостность данных
    #34069445
Alexey123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Kudinov[quot Alexey123] в теории табличные функции (inline, не multistatement, это важно) успешно обрабатываются оптимизатором
А multistatement? Возможно их использовать вместо хп, служаших для возвращения данных?
...
Рейтинг: 0 / 0
Целостность данных
    #34069491
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey123 Alexey Kudinov[quot Alexey123] в теории табличные функции (inline, не multistatement, это важно) успешно обрабатываются оптимизатором
А multistatement? Возможно их использовать вместо хп, служаших для возвращения данных? Вот и еще
http://www.microsoft.com/technet/prodtechnol/sql/2005/qrystats.mspx Consider limiting use of multi-statement TVFs and table variables
Multi-statement table-valued functions (TVFs) have no statistics. The optimizer must guess the size of their results. Similarly, table variables don\'t have statistics, and the optimizer must resort to guesses for their cardinality. If a bad plan results because of these guesses, consider using a standard table or temporary table as a temporary holding place for the results of the TVF, or a replacement for the table variable. This will allow the optimizer to use better cardinality estimates.
...
Рейтинг: 0 / 0
Целостность данных
    #34069589
Alexey123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Kudinov
Спасибо
...
Рейтинг: 0 / 0
Целостность данных
    #34070663
Серж
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey123
Код: plaintext
1.
2.
CREATE FUNCTION fc1 (@a INT)
RETURNS TABLE

Так бы сразу и сказали :-) Использовали, удобная штука.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Целостность данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]