Database Role

6 отговора 208 прегледа
#1

Database Role

За какво служат ролите в базата данни и как се дефинират?

Отговор
в отговор на jp #2

Re: Database Role

Както знаеш, в базите данни има права на потребителите върху отделните обекти в базата (таблици, процедури, изгледи... дори отделните колони в тях). Вместо правата да бъдат давани директно на потребителите те могат да бъдат дадени на някаква "роля". После при логването на потребителя в базата ако той укаже тази роля, то той получава нейните права. Например имаш база, в която обикновените потребители нямат права. Имаш и роля, която има права да чете дадени таблици и да модифицира някои от тях. При логването на юзер без никакви права, но с тази роля, той получава правото да селектира данни от тези таблици и да променя онези от тях, върху които ролята има права. Възможен е и обратния случай - имаш роля, която няма права за модифициране, а само такива за четене. Така можеш да използваш администраторския акаунт за вход логване в базата без да се притесняваш, че ще омажеш нещо :)

Ролите се създават с CREATE ROLE, а за дефиниране на правата се изполават GRANT и REVOKE.

Отговор
в отговор на andrew_nikoloff #3

Re: Database Role

Благодаря за изчерпателния отговор.Като сме подхванали базите данни да се възползвам да задам още някой въпрос който ме вълнува.
И така:
базата данни се състои от няколко таблици всяка от които има първичен ключ.
Стойността на този ключ трябва да се инкрементира с 1.Естествено в Интербейс няма Autoincrement тип и се налага да се използва генератор и тригер за да се постигне ефекта на Autoincrement -та.И сега въпроса : удачно ли е за всяка таблица да се направи отделен генератор или да се направи един генератор и да се ползва от всички таблици?

Отговор
в отговор на jp #4

За генераторите...

>>> Стойността на този ключ трябва да се инкрементира с 1. <<<
Няма такова нещо. Трябва да се увеличава с две и половина. Шегувам се, разбира се Няма значение дали ще се увеличава, намалява, или ще са случайни стойности, стига те да са уникални. Разбура се обикновено е по-удобно за човек да са последователни стойности - просто за по-лесно възприятите. Това донякъде отговаря и на следващият ти въпрос - за самата база няма значение от къде идват стойностите и дали са последователни. Ако искаш можеш да си сложиш всички таблици на един генератор - базата ще си е ОК. Обикновено се прави с отделни за всеки първичен ключ. По-прегледно е. Ти си решаваш как ще ти е по-удобно.

И накрая още нещо. Повечето библиотеки ти позволяват да си дефинираш в приложението връзката между дадена колона и генератора й. Например в IBX това е пропъртито GeneratorField. Поглед ни за какво става въпрос. Може да е по-удобно да използваш него, отколкото да правиш тригери.

Отговор
в отговор на andrew_nikoloff #5

Re: За тригерите

А как протичат процесите в БД ако се направи тригер който да инкрементира генератора без да се свързва пропъртито GeneratorField. т.е. ако не изполвам това пропърти как стават нещата?Например имам DBGrid на който трябва да се напълни полето на primary key-a а това поле не е свързано с GeneratorField а се използва тригер вместо това? Интересува ме подробно как протича този процес.

Отговор
в отговор на jp #6

Re: За тригерите

Ами първо - трябва да имаш тригер. Добре е той все пак да проверява дали ти не си попълнил вече ID-то.

create trigger my_table_bi0 for my table
active before insert position 0
as
begin
if (new.id is null) then
new.id = gen_id(some_generator, 1);
end

След това ако в dataset-а ти трябва да махнеш required на ID фийлда, за да можеш да си post-неш записа без да си му задал стойност.
И тук вече идват неудобствата. За да разбереш каква стойност е поличил ID-то на записа трябва да си refresh-неш dataset-а. А тъй като ти не знаеш ID-то на текущия ред не можеш да си изпълниш refresh sql-а (освен ако не го направиш да ползва други полета, но не ми харесва идеята), т.е. трябва да си затвориш и отвориш таблицата. После трябва да познаеш кой е бил новия ти запис и т. н.

С две думи - използвай тригери само за таблици, които ги пълниш и не ги чете веднага след това - някакви логове, прости данни и т.н.

Отговор
в отговор на jp #7

За първичните ключове

Понякога е удобно да използваш един генератор за ключовете на няколко таблици например ако възнамеряваш да показваш данни в дърво или нещо подобно.

----------
По склона към връх Фудзи плахо пълзи охлюв към самото небе.
Отговор