Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1193827892
Ega23
2007-10-31 13:51
2007.12.02
Народ, а никто случайно не знает, какой сейчас официальный


2-1194435147
tipman
2007-11-07 14:32
2007.12.02
Разъезжаются контролы при использовании тем WinXP


11-1179326027
Ned
2007-05-16 18:33
2007.12.02
Пример по работе с PNG


1-1189420172
Kuzmich_Delphi
2007-09-10 14:29
2007.12.02
фоновая картинка под ползунок


15-1193836277
фыва
2007-10-31 16:11
2007.12.02
Как убрать фон вокруг названия ярлыков на рабочем столе?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский