Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.02;
Скачать: CL | DM;

Вниз

Музыкой навеяло...   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.82 MB
Время: 0.034 c
8-1170431716
Jimmy
2007-02-02 18:55
2007.12.02
Не работает пунктир для толстых линий.


15-1194092585
Kostafey
2007-11-03 15:23
2007.12.02
NOOOXML


15-1193749434
Черный Шаман
2007-10-30 16:03
2007.12.02
Разводка кабеля питания.


3-1184763707
tiktak
2007-07-18 17:01
2007.12.02
Преимущества создания баз данных при помощи MS Access и Delphi


2-1194692484
GSC
2007-11-10 14:01
2007.12.02
Переименование ключа