Форум: "Прочее";
Текущий архив: 2007.12.02;
Скачать: [xml.tar.bz2];
ВнизМузыкой навеяло... Найти похожие ветки
← →
DiamondShark © (2007-11-01 12:55) [0]За
SELECT * ...
-- оставлять на 6 часов без обеда.
За INSERT без списка полей -- лишать 50% зарплаты.
За...WHERE OrderDate="+DateToStr(d)
вместо параметризованного запроса -- бить милицейской дубинкой по почкам.
За hard-coded SQL больше чем из одного оператора, не вынесенный в ХП -- пожизненный эцих с гвоздями.
← →
wicked © (2007-11-01 12:57) [1]> За SELECT * ... -- оставлять на 6 часов без обеда.
если это не тестовый код
> За INSERT без списка полей -- лишать 50% зарплаты.
угу
> За ...WHERE OrderDate="+DateToStr(d) вместо параметризованного
> запроса -- бить милицейской дубинкой по почкам.
> За hard-coded SQL больше чем из одного оператора, не вынесенный
> в ХП -- пожизненный эцих с гвоздями.
а вот подобные предъявы надо делать разработчикам mysql и хостерам
тем более, что вменяемых СУБД для веб не существует
← →
Правильный_Вася (2007-11-01 13:01) [2]шо ж ты за музыку слушаешь?
красную плесень, что ли?
← →
clickmaker © (2007-11-01 13:01) [3]
> Музыкой навеяло...
какой?
du hast рамштайна? )
> оставлять на 6 часов без обеда
тоже мне, наказание... на неделю без пива - вот самое то
← →
Skyle © (2007-11-01 13:01) [4]К нам на днях приходил соискатель, который знал о try...finally и try...except, но использовал их очень удивительно.
try
try
Obj := TSomeClass.Create;
try
Obj.DoIt;
except
end;
finally
Obj.Free;
end;
except
end;
Объяснялось это тем, что исключения ни в коем случае не должны прерывать работы программы. Лучше об ошибке сообщить другим способом, например числовым кодом возврата.
← →
DiamondShark © (2007-11-01 13:02) [5]
> шо ж ты за музыку слушаешь?
> красную плесень, что ли?
Не-а. Волосатое стекло.
← →
clickmaker © (2007-11-01 13:04) [6]
> [4] Skyle © (01.11.07 13:01)
ну а вы конечно сразу его ногами, ногами?
> что исключения ни в коем случае не должны прерывать работы
> программы
на самом деле, доля сермяжной правды в этом есть, смотря что за программа...
← →
DiamondShark © (2007-11-01 13:10) [7]
> например числовым кодом возврата.
Код возврата должен умереть, как замшелый архаизм.
← →
homm © (2007-11-01 13:15) [8]> За ...WHERE OrderDate="+DateToStr(d) вместо параметризованного
> запроса -- бить милицейской дубинкой по почкам.
> За hard-coded SQL больше чем из одного оператора, не вынесенный
> в ХП -- пожизненный эцих с гвоздями.
А что происходит с параметризованными запросами, когда они передаются серверу БД?
Если не ошибаюсь ReplaceString(тра-ла-ла), отчего повышеный расход памяти при передаче больших данных.
← →
Skyle © (2007-11-01 13:16) [9]
> clickmaker © (01.11.07 13:04) [6]
> > [4] Skyle © (01.11.07 13:01)
> на самом деле, доля сермяжной правды в этом есть, смотря
> что за программа...
Согласен, что-то есть. Например доступ к индексируемому свойству у него всегда пишется примерно так
function GetSomeObjProp(Index : Integer) : TSomeObjType;
begin
if (Index >= 0) and (Index < Pred(Count)) then
Result := FList[Index]
else
Result := nil;
end;
Я не всегда готов соглашаться с подобным подходом.
← →
Игорь Шевченко © (2007-11-01 13:18) [10]
> За hard-coded SQL больше чем из одного оператора, не вынесенный
> в ХП -- пожизненный эцих с гвоздями.
Нафиг надо. Права раздавать умучаешься
← →
clickmaker © (2007-11-01 13:20) [11]
> [9] Skyle © (01.11.07 13:16)
ну я к тому, что если программа - некий сервис, к которому лезут десятки и сотни клиентов, то на каждую ошибку глупо его тормозить. Чтобы клиент получал отлуп типа "извините, сервер недоступен". Писать в лог в этом случае, а потом уж разбираться
Но в целом, конечно, except - end - это дурная привычка
← →
clickmaker © (2007-11-01 13:21) [12]
> Права раздавать умучаешься
???
← →
Игорь Шевченко © (2007-11-01 13:21) [13]clickmaker © (01.11.07 13:21) [12]
На каждый объект в базе данных принято давать права :) Чем больше объектов, тем больше раздач, нес па ?
← →
clickmaker © (2007-11-01 13:23) [14]
> На каждый объект в базе данных принято давать права
зачем? если бд админ не мазохист, конечно
← →
DiamondShark © (2007-11-01 13:29) [15]
> А что происходит с параметризованными запросами, когда они
> передаются серверу БД?
> Если не ошибаюсь ReplaceString(тра-ла-ла), отчего повышеный
> расход памяти при передаче больших данных.
Ошибаешься. Текст команды и значения параметров передаются по-отдельности, причём, значения передаются в двоичной форме, что, в среднем, компактнее, чем литералы в тексте команды.
Но дело не в экономии памяти (фигня, единицы байт), а в геморрое с преобразованием в литералы таких вещей, как числа, строки и даты.
← →
Правильный_Вася (2007-11-01 13:32) [16]
> А что происходит с параметризованными запросами, когда они передаются
> серверу БД?
> Если не ошибаюсь ReplaceString(тра-ла-ла), отчего повышеный расход
> памяти при передаче больших данных.
откуда дровишки?
← →
Правильный_Вася (2007-11-01 13:33) [17]> а в геморрое с преобразованием в литералы таких вещей, как числа,
> строки и даты.
а уж блобы...
← →
Eraser © (2007-11-01 13:33) [18]
> За hard-coded SQL больше чем из одного оператора, не вынесенный
> в ХП -- пожизненный эцих с гвоздями.
не все БД поддерживают ХП ))
← →
DiamondShark © (2007-11-01 13:36) [19]
> не все БД поддерживают ХП ))
Все БД поддерживают ХП.
← →
homm © (2007-11-01 13:40) [20]> [19] DiamondShark © (01.11.07 13:36)
> Все БД поддерживают ХП.
Не все СУБД поддерживают ХП.
← →
ZeroDivide © (2007-11-01 13:44) [21]
> За hard-coded SQL больше чем из одного оператора, не вынесенный
> в ХП -- пожизненный эцих с гвоздями.
А что такое hard-coded SQL?
← →
DiamondShark © (2007-11-01 13:45) [22]
> Игорь Шевченко ©
Права -- ничто. Удобство сопровождения -- всё.
сейчас нашёл такой SQL:
declare @Result bigint,
@Article bigint,
@Barcode char(13),
@Group bigint,
@Client bigint,
@Ware char(50)
select @Result = 0, @Article = 18615, @Barcode = "", @Group = 2, @Client = 0, @Ware = ""
if @Result >= 0 and exists (select * from ass1 where ass1.ass1002 = @Article)
select @Result = -411002
if @Result >= 0 and @Barcode != "" and exists (select * from ass3 where ass3.ass3002 = @Barcode)
select @Result = -413002
if @Result >= 0 and not exists (select * from gru2 where gru2.gru2001 = @Group) and @Group > 0
select @Result = -414003
if @Result >= 0 begin
select @Result = (select isnull(max(ass1.ass1001), 0) + 1 from ass1)
insert into ass1 (ass1.ass1001, ass1.ass1002, ass1.ass1003, ass1.ass1004, ass1.ass1005, ass1.ass1006,ass1.ass1007) values (@Result, @Article, "test123", 0, 10272, 2, 0)
insert into ass2 (ass2.ass2001, ass2.ass2002, ass2.ass2003, ass2.ass2004, ass2.ass2005, ass2.ass2006, ass2.ass2007, ass2.ass2008, ass2.ass2009, ass2.ass2010, ass2.ass2011, ass2.ass2012, ass2.ass2013, ass2.ass2014, ass2.ass2015, ass2.ass2016, ass2.ass2017, ass2.ass2018, ass2.ass2019, ass2.ass2020, ass2.ass2021, ass2.ass2022, ass2.ass2023,ass2.ass2024,ass2.ass2025,ass2.ass2026,ass2.ass2027,ass2.ass2028) values (@Result, 0, 0, 0, 0, 0, "", "", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "", "", 1, 0, 0)
insert into ass3 (ass3.ass3001, ass3.ass3002, ass3.ass3003, ass3.ass3004, ass3.ass3005) values (@Result, @Barcode, "", 1, 0)
insert into ass4 select @Result, gru2.gru2002, gru2.gru2001 from gru2 where gru2.gru2005 = 1
if @Group > 0
update ass4 set ass4.ass4003 = @Group where ass4.ass4001 = @Result and ass4.ass4002 = (select gru2.gru2002 from gru2 where gru2.gru2001 = @Group)
if @Client > 0 and @Ware != ""
insert into ass5 (ass5.ass5001, ass5.ass5002, ass5.ass5003) values (@Result, @Client, @Ware)
end
select @Result
Этот код (вместе с подстановкой литералов) жёстко закодирован в программе. После того, как некоторые таблицы были включены в репликацию, в них появились служебные столбцы. В результате выделенная строчка из-за отсутствия списка столбцов посылается далеко и нецензурно.
Теперь, вместо того, чтобы изменить одну единственную строку в ХП, надо проехать по паре десятков точек и переписать ехешник.
← →
DiamondShark © (2007-11-01 13:48) [23]
> Не все СУБД поддерживают ХП.
Все СУБД поддерживают ХП.
> А что такое hard-coded SQL?
Это SQL, который содержится в коде клиентской программы, и изменить который можно только перекомпиляцией исполняемого модуля.
← →
Sergey13 © (2007-11-01 13:50) [24]> [22] DiamondShark © (01.11.07 13:45)
> Теперь, вместо того, чтобы изменить одну единственную строку
> в ХП, надо проехать по паре десятков точек и переписать
> ехешник.
Т.е. БД у вас одна на всех, а к клиентам на велике ездите?
← →
homm © (2007-11-01 13:51) [25]> Все СУБД поддерживают ХП.
А создатели некоторых СУБД и не знали…
← →
clickmaker © (2007-11-01 13:53) [26]
> [23] DiamondShark © (01.11.07 13:48)
>
> > Не все СУБД поддерживают ХП.
>
> Все СУБД поддерживают ХП.
MySQL <= 4
← →
DiamondShark © (2007-11-01 13:54) [27]
> Т.е. БД у вас одна на всех, а к клиентам на велике ездите?
А почему Вы спрашиваете?
← →
Правильный_Вася (2007-11-01 13:56) [28]
> А создатели некоторых СУБД и не знали…
они не создали СУБД, они создали недоСУБД %)
← →
homm © (2007-11-01 13:56) [29]> [28] Правильный_Вася (01.11.07 13:56)
> они не создали СУБД, они создали недоСУБД %)
Иди мерится в детский сад.
← →
DiamondShark © (2007-11-01 13:58) [30]
> MySQL <= 4
Я же сказал "настоящий шотландец".
← →
homm © (2007-11-01 14:00) [31]> [30] DiamondShark © (01.11.07 13:58)
> Я же сказал "настоящий шотландец".
А ты кто?
← →
Sergey13 © (2007-11-01 14:04) [32]> [27] DiamondShark © (01.11.07 13:54)
> А почему Вы спрашиваете?
Ну так либо надо было бы ездить ко всем клиентам править строчку в ХП их БД, либо достаточно разослать им новый экзешник по существующему каналу связи. Какая разница?
← →
Правильный_Вася (2007-11-01 14:05) [33]
> homm © (01.11.07 13:56) [29]
а я думал, зачем тебе рулетка в кармане
← →
clickmaker © (2007-11-01 14:05) [34]
> [30] DiamondShark © (01.11.07 13:58)
>
> > MySQL <= 4
>
> Я же сказал "настоящий шотландец
да самого бесит иногда.
но вот выбрал клиент дешевый хостинг с мускулом 4, и пишешь ему в пхп что-то типа
function ClearInt($value)
{
return preg_replace("/[^0-9]/", "", $value);
}
дабы он от скл-инъекции не скончался преждевременно
← →
homm © (2007-11-01 14:06) [35]> [34] clickmaker © (01.11.07 14:05)
> function ClearInt($value)
> {
> return preg_replace("/[^0-9]/", "", $value);
> }$value+=0;
???
← →
clickmaker © (2007-11-01 14:12) [36]
> [35] homm © (01.11.07 14:06)
ты мне лучше скажи, как Оперу заставить понимать <table height="100%"
:)
← →
homm © (2007-11-01 14:13) [37]> [36] clickmaker © (01.11.07 14:12)
Заведи ветку с полным кодом. и что нужно.
← →
DiamondShark © (2007-11-01 14:18) [38]
> но вот выбрал клиент дешевый хостинг с мускулом 4, и пишешь
> ему в пхп что-то типа
Чур меня, чур!
> дабы он от скл-инъекции не скончался преждевременно
Что, там даже параметров нету?!
← →
clickmaker © (2007-11-01 14:18) [39]
> [37] homm © (01.11.07 14:13)
ну это понимает ИЕ и Лиса, а Опера упорно высоту таблицы подгоняет под контент.
А мне хочется, чтоб на все окно, вот такой каприз у меня
← →
Игорь Шевченко © (2007-11-01 14:19) [40]clickmaker © (01.11.07 13:23) [14]
В смысле зачем ? Для разграничения доступа вестимо.
DiamondShark © (01.11.07 13:45) [22]
> Права -- ничто. Удобство сопровождения -- всё.
Не совсем понимаю, чем пара SQL-запросов обернутых в ХП удобнее в сопровождении, чем не в ХП. Куча ХП разве проще в сопровождении ?
← →
clickmaker © (2007-11-01 14:20) [41]
> Что, там даже параметров нету?!
да ты чё... какие параметры
есть конечно sprintf, но сам факт отсутствия ХП оченно удручает
← →
clickmaker © (2007-11-01 14:22) [42]
> [40] Игорь Шевченко © (01.11.07 14:19)
> clickmaker © (01.11.07 13:23) [14]
>
> В смысле зачем ? Для разграничения доступа вестимо
а бизнес-логика на что?
в базу вообще напрямую кроме sa никого пускать нельзя. А то потом начинается: "а вот у нас данные куда-то пропали... а вот нельзя ли посмотреть лог транзакций... а вот кто последний в эту табличку ходил..."
← →
Игорь Шевченко © (2007-11-01 14:25) [43]clickmaker © (01.11.07 14:22) [42]
> а бизнес-логика на что?
Ниче не понял, причем тут бизнес-логика. В базе данных есть объекты, таблицы там всякие, процедуры, представления и еще дофига. На них на всех желательно дать доступ тем, кому он необходим. Чем больше объектов (тех же ХП) тем больше раздач.
← →
homm © (2007-11-01 14:25) [44]> [39] clickmaker © (01.11.07 14:18)
Код говорю в студию (тока студия не в этой ветке).
Опера все нормально понимает, что-бы помочь тебе, мне нужно знать в чем иименно…
← →
clickmaker © (2007-11-01 14:35) [45]
> [44] homm © (01.11.07 14:25)
да ну на хрен еще ветки плодить, тем более, что тут по теме вряд ли чего-то новое скажут
код простой
<table class="content" height="100%"><tr><td class="content">
%CONTENT%
</td></tr></table>
что через стиль, что напрямую - опера высоту 100% не ставит
Version 8.51
Build 7712
← →
clickmaker © (2007-11-01 14:37) [46]
> [43] Игорь Шевченко © (01.11.07 14:25)
Вы все еще кипятите? Тогда мы идем к вам
Я к тому, что ни разу не использовал механизм секьюрити сиквела для разграничения полномочий. И как-то жив до сих пор.
Я живу не так? :)
← →
homm © (2007-11-01 14:42) [47]> Version 8.51
> Build 7712
Раритет не собираю, проверь сам, работает или нет, но вообще-то в таком виде работать и не оченьто и должно…<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<style>
html, body, #maintable {
width: 100%;
height: 100%;
padding: 0;
margin: 0;
}
</style>
</head>
<body>
<table id=maintable>
<tr><td valign=bottom>
%CONTENT%
</table>
</body>
</html>
← →
clickmaker © (2007-11-01 14:44) [48]
> в таком виде работать и не оченьто и должно
почему? противоречит последнему постановлению госдумы?
← →
homm © (2007-11-01 14:45) [49]> [48] clickmaker © (01.11.07 14:44)
> почему?
Потому что height="100%" это от родителя, а родитель — body, а у body height не 100% от страници.
← →
clickmaker © (2007-11-01 14:48) [50]
> [49] homm © (01.11.07 14:45)
поставил 100% у body - no effect
И почему это Опера 8 - уже раритет? Чем пользуются чисто реальные пацаны?
← →
homm © (2007-11-01 14:49) [51]> [50] clickmaker © (01.11.07 14:48)
> поставил 100% у body - no effect
Из [47] попробовал? как дела?
← →
clickmaker © (2007-11-01 14:53) [52]
> [51] homm © (01.11.07 14:49)
47 - да
но я-то тоже пишу в стиль body 100%
только у меня стили в css цепляются
и не работает
← →
Ega23 © (2007-11-01 14:54) [53]Вот мне как-то музыкой навеяло... Сижу, Uriah Heep слушаю, return to fantasy.
Попутно Build ConnectionString делаю. И что-то не вяжется (сервер по IP надо было указывать). И тут
Searching every day
Looking every way
Trying to make a connection
To find a piece of the action
Я чуть со стула не упал...
← →
homm © (2007-11-01 14:55) [54]> [52] clickmaker © (01.11.07 14:53)
> но я-то тоже пишу в стиль body 100%
Потому что height="100%" это от родителя, а родитель — html, а у html height не 100% от страници.
← →
homm © (2007-11-01 14:56) [55]> [52] clickmaker © (01.11.07 14:53)
Это называется посмотри и найди 10 отличий.
← →
Sonia © (2007-11-01 14:56) [56]
> Ega23 © (01.11.07 14:54) [53]
И давно это у вас? :)
← →
Ega23 © (2007-11-01 14:59) [57]
> И давно это у вас? :)
Uriah Heep слушаю? - так это, лет с четырёх. У меня батя старый рокер... :)
Build ConnectionString? - так уже года 4, как на ADO перешли...
На слух аглицкий в песнях воспринимаю? Ну это не всегда, но у Heep - лет 7 как...
Со стула падаю? Так я же не упал...
:))))
← →
clickmaker © (2007-11-01 14:59) [58]
> [54] homm © (01.11.07 14:55)
кстати, если обернуть код [47] в <form></form>, то перестает растягиваться
установка <form height="100%"> не помогает
а вот, если в стиль добавить form - помогает
блин... получается, что Опера не наследует стили от вышестоящих блоков, а нужно для каждого явно стиль прописывать?
← →
Eraser © (2007-11-01 14:59) [59]
> clickmaker © (01.11.07 14:05) [34]
это еще что за извращение ))
intval.
← →
homm © (2007-11-01 15:02) [60]> [58] clickmaker © (01.11.07 14:59)
> установка <form height="100%"> не помогает
потому что у form нет свойства height, надо полагать?
> блин... получается, что Опера не наследует стили от вышестоящих
> блоков, а нужно для каждого явно стиль прописывать?
Наследует. Те, которые нужно наследовать.
http://htmlbook.ru/css/width.htmlНаследуется Нет
И в данном случае ты хочешь что-бы наследовалось от нижестоящих блоков, это уже бред.
← →
Павел Калугин © (2007-11-01 15:07) [61]
> За SELECT * ... -- оставлять на 6 часов без обеда.
> За INSERT без списка полей -- лишать 50% зарплаты.
> За ...WHERE OrderDate="+DateToStr(d) вместо параметризованного
> запроса -- бить милицейской дубинкой по почкам.
> За hard-coded SQL больше чем из одного оператора, не вынесенный
> в ХП -- пожизненный эцих с гвоздями.
Я бы пересмотрел меры воздействия
> За hard-coded SQL больше чем из одного оператора
1. за употребление терминов вида hard-coded - неделя без обеденного перерыва
2. Исписать всю стену словами (12 кеглем) "Больше двух во фроме вьюха больше трех ХП" всю стену. После проверки обязать закрасить"
> За ...WHERE OrderDate="+DateToStr(d) вместо параметризованного
> запроса
см. предидущий пункт
> За SELECT * ...
предложить написать заявление об уходе по собственному желанию
> За INSERT без списка полей -- лишать 50% зарплаты.
предложить подписать заявление об уходе по собственному желанию, в противном случае первый строгий выговор. (после третьего и заявление по собственному не надо будет)
← →
DrAndrey © (2007-11-01 15:20) [62]А что делать с разработчиком чье ПО работает только с логином sa, а для отчета делает бэкап базы.
← →
Ega23 © (2007-11-01 15:22) [63]
> А что делать с разработчиком чье ПО работает только с логином
> sa, а для отчета делает бэкап базы.
- Раз недруг - повесить, - хрипло сказал отец Цупик.
- А ваше мнение, брат Аба? - спросил дон Рэба, предупредительно
наклоняясь к толстяку.
- Вы знаете... Я как-то даже... - Брат Аба растерянно и детски
улыбнулся, разведя коротенькие ручки. - Как-то мне, знаете ли, все равно.
Но, может быть, все-таки не вешать?.. Может быть, сжечь, как вы полагаете,
дон Рэба?
- Да, пожалуй, - задумчиво сказал дон Рэба.
- Вы понимаете, - продолжал очаровательный брат Аба, ласково улыбаясь
Румате, - вешают отребье, мелочь... А мы должны сохранять у народа
уважительное отношение к сословиям. Все-таки отпрыск древнего рода,
крупный ируканский шпион... Ируканский, кажется, я не ошибаюсь? - Он
схватил со стола листок и близоруко всмотрелся. - Ах, еще и соанский...
Тем более!
- Сжечь так сжечь, - согласился отец Цупик.
- Хорошо, - сказал дон Рэба. - Договорились. Сжечь.
← →
clickmaker © (2007-11-01 15:24) [64]
> для отчета делает бэкап базы
оригинально
а зачем? бэкап в качестве отчета?
← →
DrAndrey © (2007-11-01 15:32) [65]Раз в месяц в Управление необходимо отправлять регистр. Там они его сводят в кучу и шлют далее. А то, что сервер не делает бэкап на сетевые диски им по барабану - ставьте MS SQL 2005 Express на машину в отдел кадров, туда же приложение и работайте.
← →
Игорь Шевченко © (2007-11-01 15:58) [66]clickmaker © (01.11.07 14:37) [46]
> Вы все еще кипятите? Тогда мы идем к вам
Нет, это мы идем к вам. За вашими данными.
> Я к тому, что ни разу не использовал механизм секьюрити
> сиквела для разграничения полномочий. И как-то жив до сих
> пор.
> Я живу не так? :)
То есть, команды grant и revoke для тебя остались вне скриптов ?
Тогда это нельзя назвать жизнью :)
← →
clickmaker © (2007-11-01 16:26) [67]
> [66] Игорь Шевченко © (01.11.07 15:58)
я подозревал, что не так все делаю :)
у меня табличка Users с логинами
а в базу напрямую может ходить только sa, и еще программа-клиент под внутренним логином. Пароли от этих логинов знают максимум 2 человека...
← →
Игорь Шевченко © (2007-11-01 16:59) [68]clickmaker © (01.11.07 16:26) [67]
А..то есть, механизм управления доступом к базе дублируется в приложении ? А если данные надо тянуть сторонними средствами (неважно какими), то только от sa и эта...правь не хочу ?
Тоже, конечно, способ...
← →
pasha_golub © (2007-11-01 17:01) [69]
> clickmaker © (01.11.07 16:26) [67]
>
>
> а в базу напрямую может ходить только sa, и еще программа-
> клиент под внутренним логином. Пароли от этих логинов знают
> максимум 2 человека...
Особая форма извращенства, как мне кажется. Кроме пользователей как таковых существуют группы (или теперь моднее роли). Можно хоть черта лысого настроить.
← →
Ega23 © (2007-11-01 17:08) [70]
> Особая форма извращенства, как мне кажется. Кроме пользователей
> как таковых существуют группы (или теперь моднее роли).
> Можно хоть черта лысого настроить.
не скажи. Так очень удобно раздавать права на бизнес-процессы, не лазая по системным таблицам.
Точнее - не давая пользователям (пусть даже и очень продвинутым) лазить по системным таблицам.
← →
clickmaker © (2007-11-01 17:08) [71]
> [68] Игорь Шевченко © (01.11.07 16:59)
механизм доступа к объектам предметной области реализован поверх системной. То есть, что-то типа своего ACL. Встроенной сиквельной при все желании не хватит, чтобы учесть все возможные пересечения полномочий, которые могут потребоваться. Вы ж понимаете, что там далеко не только на уровне "можно select - нельзя select", "можно update - нельзя update"...
Доступ на таблицы и прочие хранимки не разграничивается, потому как работать с ними может только sa.
Сторонние средства не используются (кроме как админом, опять же).
Я понимаю, что это частный случай, но он большинство потребностей по автоматизации разного рода предприятий покрывает
← →
Ega23 © (2007-11-01 17:12) [72]
> clickmaker © (01.11.07 17:08) [71]
+1
← →
Берия Лаврентий Павлович (2007-11-01 17:18) [73]50% зарплаты, лишение обеда, выговор...
Мда.. Мельчают люди...
РАССТРЕЛЯТЬ!!!
С ОБЯЗАТЕЛЬНЫМ ЛИШЕНИЕМ ПРАВ УПРАВЛЕНИЯ АВТОМОБИЛЕМ НА 5 ЛЕТ!!!
← →
Piter © (2007-11-01 17:58) [74]DiamondShark © (01.11.07 12:55)
За SELECT * ... -- оставлять на 6 часов без обеда
а какая разница... Зачем перечислять все поля таблицы, если они тебе нужны именно все? Можно написать "*"
DiamondShark © (01.11.07 12:55)
За INSERT без списка полей -- лишать 50% зарплаты
а как можно сделать INSERT без списка полей? Что это за запрос и в какие поля какие значения будут вставлены? Не понимаю...
← →
Ega23 © (2007-11-01 18:12) [75]
> а как можно сделать INSERT без списка полей? Что это за
> запрос и в какие поля какие значения будут вставлены?
Create table T1
(
Col1 int,
Col2 char(10)
)
Insert into T1 Values (1, "aaa")
← →
data © (2007-11-01 18:18) [76]
> Ega23 © (01.11.07 18:12) [75]
>
> > а как можно сделать INSERT без списка полей? Что это за
>
> > запрос и в какие поля какие значения будут вставлены?
>
>
> Create table T1
> (
> Col1 int,
> Col2 char(10)
> )
>
> Insert into T1 Values (1, "aaa")
тоже, кстати, не знала про такое. По-моему это не все СУБД поддерживают. Или я ошибаюсь?
← →
Ega23 © (2007-11-01 18:28) [77]
> тоже, кстати, не знала про такое.
в MSSQL есть ещё круче:
Create table T1
(
Col1 int identity(1,1),
Col2 int defaulr 0,
Col3 datetime default getdate()
)
Insert into T1 default values
:)
← →
DiamondShark © (2007-11-01 18:28) [78]
> Piter © (01.11.07 17:58) [74]
> За SELECT * ... -- оставлять на 6 часов без обеда
>
> а какая разница... Зачем перечислять все поля таблицы, если
> они тебе нужны именно все? Можно написать "*"
"Именно все" нужны только в том случае, если твоё приложение -- что-то вроде SQLExplorer.
В приложении определённой предметной области, во-первых, "именно все" поля мало когда нужны, а, во-вторых, если программист написал SELECT *, значит в момент написания этого кода он слабо представлял себе, что и зачем из этой таблицы ему нужно.
Иными словами, писал код одной рукой, второй почёсывая яйца.
> За INSERT без списка полей -- лишать 50% зарплаты
>
> а как можно сделать INSERT без списка полей? Что это за
> запрос и в какие поля какие значения будут вставлены? Не
> понимаю...
Вот так и можно insert into z values(1,2,3). Вставлено будет в поля, в порядке их следования в таблице. Количество значений должно совпадать с количеством полей. Поэтому, если в таблице появятся доп. поля, даже с вменяемыми дефалтами, запрос перестанет работать.
← →
Ega23 © (2007-11-01 18:29) [79]
> тоже, кстати, не знала про такое. По-моему это не все СУБД
> поддерживают. Или я ошибаюсь?
Не знаю. Я, честно говоря, никогда так не делаю. Кроме случаев insert из Select во временную таблицу
← →
Ega23 © (2007-11-01 18:32) [80]
> "Именно все" нужны только в том случае, если твоё приложение
> -- что-то вроде SQLExplorer.
>
2 справочные таблицы, третяя - связка "многие-ко-многим" между справочными с ещё одним дополнительным полем для каждого сочетания.
Обычно пишуSelect T3.*, T1.Name, T2.Name
from Table1 T1, Table2 T2, Table3 T3
where T3.T1ID=T1.ID and T3.T2ID=T2.ID
← →
Val © (2007-11-01 18:36) [81]жестоко лишать людей возможности массовых вставок.
← →
Eraser © (2007-11-01 18:38) [82]
> Val © (01.11.07 18:36) [81]
а кто лишает?insert (name, address) values select t.name, t.address from t_user t;
← →
DiamondShark © (2007-11-01 19:31) [83]
> Обычно пишу
>
> Select T3.*, T1.Name, T2.Name
А почему не
SELECT T1.ID, T1.Name, T2.ID, T2.Name
?
Это и есть то, о чём я говорил. После того, как написано слово "SELECT" нет понимания того, что и зачем тебе нужно. Так пишет дрессированый робот, а не человек. Человек думает так: "Тут мне нужны (SELECT) код и название фиговины (T1.ID, T1.Name), а ещё код и название хреновины (T2.ID, T2.Name)".
> from Table1 T1, Table2 T2, Table3 T3
> where T3.T1ID=T1.ID and T3.T2ID=T2.ID
Повбывав бы!
Буквы экономишь? Иннер джоин лень писать?
А как мне потом в каше из эндов разгребаться взглядом?
← →
DiamondShark © (2007-11-01 19:34) [84]
> 2 справочные таблицы, третяя - связка
А потом справочники решили реплицировать. Ну и нафига тебе rowguid из T3?
← →
Vendict © (2007-11-01 19:39) [85]
> Ega23 © (01.11.07 18:28) [77]
чур меня, чур !
← →
Ega23 © (2007-11-01 19:55) [86]Не забывай, что это не просто связка "многие-ко-многим", там на каждом пересечении ещё какая-то фигня стоит.
Когда просто связь - я так, естественно, не пишу.
> Буквы экономишь? Иннер джоин лень писать?
А нахрена????
← →
Ega23 © (2007-11-01 19:57) [87]
> чур меня, чур !
А почему?
Не, я сам случайно про такую узнал, когда тестовую табличку генерил.
Но тем-не-менее - факт. :)
← →
Vendict © (2007-11-01 20:10) [88]
> А почему?
я как-то раз увидел, как в Acsess"e число представляется ...
не нравится просто мне отход от стандартов и придумывания своих. особенно, когда это делает всеми глубокопочетаемое MS.
← →
Vendict © (2007-11-01 20:10) [89]
> число
всмысле дата.
← →
wicked © (2007-11-01 21:09) [90]> Ega23 © (01.11.07 19:55) [86]
> > Буквы экономишь? Иннер джоин лень писать?
>
>
> А нахрена????
всё ради читабельности и удобства сопровождения - удобно, когда условия связок таблиц и условия фильтрования строк отдельно... личный опыт
← →
Sergey Masloff (2007-11-01 23:22) [91]Sergey13 © (01.11.07 13:50) [24]
>Т.е. БД у вас одна на всех, а к клиентам на велике ездите?
Ну у нас БД одна на всех 10000 пользователей в паре десятков стран. Что тут плохого? Что все данные (и правила) в одном месте?
← →
Sergey Masloff (2007-11-01 23:27) [92]DiamondShark © (01.11.07 18:28) [78]
>В приложении определённой предметной области, во-первых, "именно все" >поля мало когда нужны, а, во-вторых, если программист написал SELECT *, >значит в момент написания этого кода он слабо представлял себе,
Довольно спорное утверждение. Ну не select * но нетипизированные курсоры использую постоянно. У такого подхода масса плюсов (как и у любого другого если знать где и как его применять).
← →
Petr V. Abramov © (2007-11-02 00:25) [93]> Sergey Masloff (01.11.07 23:27) [92]
> Ну не select * но нетипизированные курсоры (sys_refcursor?)
ну две большие разницы, как, говорят, говорят в Одессе
выборка лишних полей никогда на сеть хорошо не влияла -> на общий перфоменс тоже, особенно на фиговых каналах, да и перфоменс сервера тоже
← →
Думкин © (2007-11-02 05:56) [94]> Sergey Masloff (01.11.07 23:22) [91]
И вы к ним на велике ездите или таки по сети новые версии экзешников сливаете? Речь ведь шла о том, что надо физически пронестись по точкам.
← →
Bless © (2007-11-02 09:20) [95]
> clickmaker © (01.11.07 17:08) [71]
>
> Доступ на таблицы и прочие хранимки не разграничивается,
> потому как работать с ними может только sa.
Непонятно. А как этими хранимками пользуется приложение на стороне клиента? Оно работает из-под sa? А если пароль sa сменился?
> wicked © (01.11.07 21:09) [90]
> всё ради читабельности и удобства сопровождения - удобно,
> когда условия связок таблиц и условия фильтрования строк
> отдельно... личный опыт
+1
← →
Anatoly Podgoretsky © (2007-11-02 09:29) [96]
> Объяснялось это тем, что исключения ни в коем случае не
> должны прерывать работы программы. Лучше об ошибке сообщить
> другим способом, например числовым кодом возврата.
Объяснение нормально и естественное, но реализация не соответствует. За подобную пожизненый эцик с гвоздями.
← →
Sergey13 © (2007-11-02 09:30) [97]> [78] DiamondShark © (01.11.07 18:28)
> В приложении определённой предметной области...
Не стОит выдавать свои наблюдения за обобщенный опыт всего прогрессивного человечества. Завались случаев, когда нужны действительно все поля таблицы.
← →
clickmaker © (2007-11-02 09:33) [98]
> [60] homm © (01.11.07 15:02)
да, вот так работает
HTML, BODY, #frmMain, #divMain {
height: 100%;
}
ИЕ и Лиса, видимо, по умолчанию предполагают, что эти элементы 100%. Вот это и сбило с толку
← →
clickmaker © (2007-11-02 09:36) [99]
> [95] Bless © (02.11.07 09:20)
>
> > clickmaker © (01.11.07 17:08) [71]
> >
> > Доступ на таблицы и прочие хранимки не разграничивается,
> > потому как работать с ними может только sa.
>
>
> Непонятно. А как этими хранимками пользуется приложение
> на стороне клиента? Оно работает из-под sa?
нет, для него заведен специальный логин. С полномочиями ниже, чем sa.
← →
ZeroDivide © (2007-11-02 09:44) [100]
> wicked © (01.11.07 21:09) [90]
>
> > Ega23 © (01.11.07 19:55) [86]
>
> > > Буквы экономишь? Иннер джоин лень писать?
> >
> >
> > А нахрена????
>
> всё ради читабельности и удобства сопровождения - удобно,
> когда условия связок таблиц и условия фильтрования строк
> отдельно... личный опыт
А я тоже не пишу джоины и проблем особых не испытываю и вообще... оракловкие плюсики мне нарявятся куда больше, чем писать джоины.
t1.TABLE2_ID = t2.ID (+) - фарева!
← →
Anatoly Podgoretsky © (2007-11-02 09:52) [101]> Sergey13 (02.11.2007 09:30:37) [97]
Это противоречит?
Select полный список полей
insert tbl1(полный список полей) select полный список полей from tbl2
Если лень, то работника увольнять.
← →
Sergey13 © (2007-11-02 09:58) [102]> [101] Anatoly Podgoretsky © (02.11.07 09:52)
> Это противоречит?
Чему? Если нужны все поля, почему Select * это повод для увольнения?
← →
ЮЮ © (2007-11-02 10:05) [103]> Если нужны все поля
Зачем нужны атрибуты сущности неизвестные при разработке клиента?
Естественно, это не касается приложений, где таблицы БД как раз и являются объектами предметной области.
← →
b z (2007-11-02 10:12) [104]
> Зачем нужны атрибуты сущности неизвестные при разработке клиента?
а если так, xp:
.....
insert into table .....
.....
select * from table where id=<inserted>
"за кадром" работают тригера и все такое, тут тоже это не катит?
← →
Anatoly Podgoretsky © (2007-11-02 10:17) [105]> Sergey13 (02.11.2007 09:58:42) [102]
Фирма не настолько бедна, что бы постоянно увеличивать мощность серверов, наверняка в состоянии платить грамотному программисту.
← →
ЮЮ © (2007-11-02 10:18) [106]> А я тоже не пишу джоины и проблем особых не испытываю и
> вообще...
Пример абсолютной нелюбви:
http://delphimaster.net/view/2-1193987162/
Select * From A, B, C
А связь, небось, устанавливает в Filter, то-то вопросы по нему так популярны стали :)
← →
Sergey13 © (2007-11-02 10:19) [107]> [103] ЮЮ © (02.11.07 10:05)
> Зачем нужны атрибуты сущности неизвестные при разработке
> клиента?
Что значит неизвестные? Если есть спроектированная структура, то почему разработчику неизвестно назначение атрибутов? Если в будущем структура будет меняться, то по любому надо отражать это изменение в клиенте.
Опять же, в каждом конкретном случае решение должно быть конкретным и обоснованным, ИМХО. Естественно за выборку ненужных полей надо наказывать. Но именно ненужных. Пока же обсуждение (вернее осуждение) идет в ключе якобы существующих общих правил и стандартов.
← →
ЮЮ © (2007-11-02 10:25) [108]> Если есть спроектированная структура, то почему разработчику
> неизвестно назначение атрибутов?
Если они ему известны, то почему влом их указать? Из-за любви к FieldByName?
← →
Sergey13 © (2007-11-02 10:28) [109]> [108] ЮЮ © (02.11.07 10:25)
Если их указать функциональность запроса изменится?
← →
ЮЮ © (2007-11-02 10:34) [110]>Если их указать функциональность запроса изменится?
Да, если изменится структура таблицы (сдуру кто-то добавит BLOB поле)
← →
Anatoly Podgoretsky © (2007-11-02 10:37) [111]> Sergey13 (02.11.2007 10:28:49) [109]
Изменится, не не функциональность запроса, а производительность сервера.
← →
Sergey13 © (2007-11-02 10:38) [112]> [110] ЮЮ © (02.11.07 10:34)
Если структура меняется сдуру, то тут уже ничего не изменишь. 8-)
← →
Sergey13 © (2007-11-02 10:41) [113]> [111] Anatoly Podgoretsky © (02.11.07 10:37)
Почему? Если в таблице 2 поля то * будет медленнее чем Id, Name?
← →
Anatoly Podgoretsky © (2007-11-02 10:50) [114]> Sergey13 (02.11.2007 10:41:53) [113]
Тем что сервер будет вынужден делать разбор - менять звездочку на список полей как минимум, а оптимизатор будет эту конструкцию каждый раз разбирать и компилировать. Налицо деградация производительности.
← →
Sergey13 © (2007-11-02 10:56) [115]> [114] Anatoly Podgoretsky © (02.11.07 10:50)
С другой стороны длина запроса возрастает, возрастает время на разбор правильности имен полей и принадлежности их таблице. Плюс разница в написании имен полей разными программистами увеличивает вероятность непопадания запроса в кеш, следовательно возрастание жестких разборов. Тут тоже, ИМХО, палка о двух концах.
← →
Anatoly Podgoretsky © (2007-11-02 11:02) [116]Как правило после замены звездочки списком полей наступает твой пункт разбор правильности имен полей и принадлежности их таблице, не обязательно, но обычно сервера и компиляторы работают по шаблонам, нужен, не нужен шаг, но он выполняется.
На разборку запрос поступает после его подготовки к разбору, то есть никаких звездочек. После разбора проверка в кеше, потом построение плана, если необходимо.
← →
Sergey13 © (2007-11-02 11:08) [117]> [116] Anatoly Podgoretsky © (02.11.07 11:02)
> После разбора проверка в кеше
А помоему наоборот. Иначе чем объяснить то, что в кэш не попадают одинаковые запросы написанные в разных регистрах (даже отдельные символы).
ЗЫ: На всякий случай - я в основном про оракл.
← →
Игорь Шевченко © (2007-11-02 11:14) [118]За SELECT * убивать надо пожизненно.
← →
Anatoly Podgoretsky © (2007-11-02 11:37) [119]> Sergey13 (02.11.2007 11:08:57) [117]
А я в основном про другие сервера, видимо Оракл регистро-чувствителен
← →
Игорь Шевченко © (2007-11-02 12:05) [120]
> Иначе чем объяснить то, что в кэш не попадают одинаковые
> запросы написанные в разных регистрах (даже отдельные символы).
>
Orcale cursor sharing algorithm is case sensitive
← →
TohaNik © (2007-11-02 14:47) [121]
> За SELECT * ... -- оставлять на 6 часов без обеда.
фигня
лучше шесть обедов за час
← →
Sergey13 © (2007-11-02 15:28) [122]> [120] Игорь Шевченко © (02.11.07 12:05)
> Orcale cursor sharing algorithm is case sensitive
Ну так это скорее доказывает мою правоту - запрос сначала ищется в кэше, а потом разбирается, если не найден. Иначе какой смысл был бы класть в кэш непреобразованный по регистру текст запроса, что бы потом отсеивать по расхождению этого регистра одинаковые запросы.
ИМХО так.
← →
Игорь Шевченко © (2007-11-02 16:03) [123]Sergey13 © (02.11.07 15:28) [122]
Разбирается он раньше. Потому что какой смысл искать запрос
select bar from foo
если одна сессия под foo подразумевает user1.foo, а другая - user2.foo ?
← →
Sergey13 © (2007-11-02 16:24) [124]> [123] Игорь Шевченко © (02.11.07 16:03)
Смутил ты меня этим аргументом, не скрою, но не убедил. На досуге надо будет поискать у классиков - обновить память.
← →
Игорь Шевченко © (2007-11-02 16:57) [125]
> На досуге надо будет поискать у классиков - обновить память.
у Кайта написано
Страницы: 1 2 3 4 вся ветка
Форум: "Прочее";
Текущий архив: 2007.12.02;
Скачать: [xml.tar.bz2];
Память: 0.94 MB
Время: 0.051 c