Действительно ли триггеры базы данных являются злыми? [закрытый]

Чтобы завершить список возможных альтернатив, reduce можно использовать для реализации поведения flatten :

var a = ["a", "b", "c"] 
var b = ["d", "e", "f"]

let res = [a, b].reduce([],combine:+)

Лучшая альтернатива (производительность / память ) среди представленных - просто flatten, которые лениво завершают оригинальные массивы, не создавая новую структуру массива.

Но обратите внимание, что flatten не возвращает LazyColletion , так что ленивое поведение не будет распространяться на следующую операцию вдоль цепочки (карта, плоская карта, фильтр и т. д.).

Если ленивость имеет смысл в вашем конкретном случае, просто запомните, чтобы добавить или добавить .lazy в flatten(), например, модифицируя образец Томаша следующим образом:

let c = [a, b].lazy.flatten() 
179
задан WW. 20 January 2009 в 07:01
поделиться

19 ответов

Основные проблемы с триггерами a) они абсолютно Глобальны - они применяются, неважно, что контекст действия таблицы; и b) они являются тайными; легко забыть, что они там, пока они не причиняют Вам боль с непреднамеренным (и очень таинственный) последствия.

, Который просто означает, что они должны тщательно использоваться для надлежащих обстоятельств; который, по моему опыту, ограничен реляционными проблемами целостности (иногда с более прекрасной гранулярностью, чем можно добраться декларативно); и обычно не в бизнес-или транзакционных целях. YMMV.

142
ответ дан dkretz 4 November 2019 в 15:51
поделиться

Триггеры, кажется, работают хорошо на контрольный вход.

20
ответ дан derobert 4 October 2019 в 17:06
поделиться

Действительно, довольно часто триггеры неправильно используются. На самом деле в большинстве случаев Вам даже не нужны они. Но это не делает их обязательно плохо.

сценарий А, который появляется по моему мнению, где триггеры полезны, - когда у Вас есть унаследованное приложение, для которого у Вас нет исходного кода и нет никакого способа изменить его.

1
ответ дан ibz 4 November 2019 в 15:51
поделиться

Сказать, что они являются злыми, - преувеличение, но они могут вызвать сетки. Когда увольнение одного триггера заставляет другие триггеры стрелять, это становится действительно сложным. Скажем, они неприятны: http://www.oracle.com/technology/oramag/oracle/08-sep/o58asktom.html

Занимающаяся бизнесом логика в Oracle с триггерами более трудна, чем это кажется из-за много проблем параллелизма. Вы не видите изменений на другой сессии до других фиксаций сессий.

4
ответ дан tuinstoel 4 November 2019 в 15:51
поделиться

Я думаю, что они могут быть злыми, но только столь же злыми как что-либо еще в разработке.

, Хотя у меня действительно нет большого опыта с ними, у меня действительно были они на недавнем проекте, я работал, на котором имеет, приводят меня к этому заключению. Проблема, которую я имею с ними, они могут заставить бизнес-логику оказываться в двух местах, библиотека кода и база данных.

я рассматриваю его как подобный спор с использованием sprocs. У Вас часто будут разработчики, которые действительно хороши в бизнес-логике записи SQL в базу данных, в то время как у людей, которые не являются, будет своя бизнес-логика в другом месте.

, Таким образом, мое эмпирическое правило является взглядом на то, какова структура Вашего проекта. Если это кажется жизнеспособным, чтобы сохранить бизнес-логику в базе данных тогда, могло бы быть полезно иметь триггеры.

3
ответ дан Aaron Powell 4 November 2019 в 15:51
поделиться

Если существуют побочные эффекты, это - проблема дизайном. В некоторых системах баз данных нет никакой другой возможности установить автоинкрементное поле т.е. для поля ID первичного ключа.

3
ответ дан Xn0vv3r 4 November 2019 в 15:51
поделиться

Nah, они не являются злыми - они - просто неправильно понятые Триггеры:-D

, имеют допустимое использование, но слишком часто как ретро взлом, который в конечном счете делает вещи хуже.

при разработке DB как части приложения логика должна всегда быть в коде или sprocs совершением звонка. Триггеры просто приведут к боли отладки позже.

, Если Вы понимаете, как блокировка, заведение в тупик и как файлы доступа DBS на диске затем с помощью триггеров правильным способом (например, аудит или архивация прямого доступа DB) могут быть действительно ценными.

4
ответ дан Keith 4 November 2019 в 15:51
поделиться

Не злой. Они на самом деле упрощают вещи как

1. Вход/аудит изменений в записях или даже схемах базы данных

у Вас мог быть триггер на ALTER TABLE, который откатывает изменения в Вашей продуктивной среде. Это должно предотвратить любые случайные модификации таблицы.

<час>

2. Осуществление справочного intrgrity (основные отношения / отношения внешнего ключа, и т.д.) через несколько баз данных

5
ответ дан Chris 4 November 2019 в 15:51
поделиться

Я знаю разработчиков, которые думают, что триггеры должны всегда использоваться, где это - самый прямой способ достигнуть функциональности, они хотят, и разработчики, которые никогда не будут. Это почти похоже на догму между этими двумя лагерями.

Однако я лично полностью согласен с MarkR - можно (почти) всегда писать код, функционально эквивалентный триггеру, который будет более ясным и поэтому легче поддержать.

5
ответ дан DanSingerman 4 November 2019 в 15:51
поделиться

Триггеры являются хорошим инструментом при надлежащем использовании. Expecially для вещей как аудит изменяются, заполнение таблиц реферирования, и т.д.

Теперь они могут быть "злыми", если Вы оказываетесь в "триггерном аду" с одним триггером, который начинает другие триггеры. Я когда-то работал над продуктом COTS, где они имели то, что они назвали "триггерами гибкого провода". Эти триггеры были сохранены в таблице, как динамические жала sql, были скомпилированы каждый время, они выполнялись. Скомпилированные триггеры привели бы в порядок взгляд и видели бы, имела ли та таблица какие-либо триггеры гибкого провода, чтобы выполнить и затем скомпилировать и выполнить триггер "гибкого провода". В теории это походило на действительно классную идею, потому что продукт был легко настроен, но действительность была базой данных, в значительной степени взорванной из-за всех компиляций, которые это должно было сделать...

Так да, они являются великими, если Вы сохраняете то, что Вы делаете в перспективе. Если это - что-то довольно простое как аудит, суммирование, автоупорядочивание, и т.д., никакой prob. Просто имейте в виду темп роста таблицы и как триггер повлияет на производительность.

6
ответ дан tmeisenh 4 November 2019 в 15:51
поделиться

Триггеры имеют свое использование - вход/аудит и поддержание "последней измененной" даты являются двумя очень хорошим использованием, которое было упомянуто в предыдущих ответах.

Однако один из базовых принципов хорошего дизайна - то, что бизнес-логика/независимо от того, что правил/бизнеса, которую Вы хотите назвать им, должна быть сконцентрирована в единственном месте. При помещении части логики в базе данных (через триггеры или сохраненный procs) и некоторые в приложении нарушают тот принцип. Дублирование логики в обоих местах еще хуже, поскольку они неизменно выйдут из синхронизации друг с другом.

существует также "принцип наименьшего количества удивления" проблема, которая была уже упомянута.

7
ответ дан Dave Sherohman 4 November 2019 в 15:51
поделиться

Триггеры чрезвычайно мощны и полезны, существует любое количество сценариев, где триггер является лучшим решением проблемы.

Они - также очень хороший инструмент "взлома". Часто существуют ситуации, где Вы не находитесь в непосредственном управлении и кода и базы данных. Если необходимо ожидать 2 месяца следующей главной версии кода, все же можно применить патч к базе данных сразу тогда, можно поместить триггер на таблицу для выполнения некоторой дополнительной функциональности. Тогда, когда выпуск кода возможен, можно заменить этот триггер кодированной версией той же функциональности при желании.

В конце дня, все является "злым", если Вы не знаете то, что он делает. Решение, что триггеры - то, потому что существуют разработчики, которые не понимают их, совпадает с утверждением, что автомобили являются злыми, потому что некоторые люди не могут управлять...

9
ответ дан Robin Day 4 November 2019 в 15:51
поделиться

Я соглашаюсь. Проблемами с триггерами являются люди, не триггеры. Хотя это больше, чтобы посмотреть на, больше рассмотреть и увеличивает бремя на кодерах, проверяющих вещи правильно, мы не отбрасываем индексы для создания наших жизней более простыми. (Плохие индексы могут быть настолько же плохими как плохие триггеры)

, важность триггеров (в моем уме) является этим...
- Любая система должна всегда быть в допустимом состоянии
- Код для осуществления этого допустимого состояния должен быть централизован (не записанный в каждом SP)

С точки зрения обслуживания, триггер очень полезен для компетентных кодеров и проблем для более младших/любительских. Все же эти люди должны учиться и вырасти так или иначе.

я предполагаю, что это сводится к Вашей рабочей среде. У Вас есть надежные люди, которые учатся хорошо и могут доверяться, чтобы быть методическими? Если не у Вас по-видимому есть два варианта:
- Признают, что необходимо будет проиграть, функциональность для компенсации
- Признают, что Вам нужны различные люди или лучшее обучение и управление

, Они звучат резкими, и я предполагаю, что они. Но это - основная истина в моем уме...

20
ответ дан Dave Sherohman 4 November 2019 в 15:51
поделиться

Главным образом, да.

трудность с триггером состоит в том, что он действительно наполняет "за Вашей спиной"; разработчик, поддерживающий приложение, не мог легко понять, что это там, и внесите изменения, которые завинчивают вещи без того, чтобы даже замечать.

Это создает слой сложности, которая просто добавляет работы по техническому обслуживанию.

Вместо того, чтобы использовать триггер, хранимая процедура / стандартная программа, может обычно делаться сделать то же самое, но ясным и удобным в сопровождении способом - вызов сохраненной стандартной программы означает, что разработчик может посмотреть на ее исходный код и видеть точно, что происходит.

13
ответ дан MarkR 4 November 2019 в 15:51
поделиться

Инструменты никогда не являются злыми. Применения тех инструментов могут быть злыми.

47
ответ дан Andy Webb 4 November 2019 в 15:51
поделиться

Нет, они - на самом деле хорошая идея. Если существует проблема с Вашими определенными триггерами, то Вы не делаете их правильно, но это обычно означает, что существует проблема с Вашей реализацией, не понятие самих триггеров:-).

Мы используем, инициировал много, потому что это помещает определенное для DBMS действие под управлением базы данных, где это принадлежит. Пользователям DBMS не придется волноваться о таком материале. Целостность данных находится с самой базой данных, не приложения или пользователи, которые используют его. Без ограничений и триггеров и других функций в базе данных, это оставляют приложениям осуществить правила, и только требуются один жулик или ошибочное приложение/пользователь для уничтожения данных.

, Например, без триггеров, такие поразительные вещи, поскольку автоматически сгенерированные столбцы не существовали бы, и необходимо будет обработать функцию на каждой строке при выборе их. Это, вероятно, уничтожит производительность DBMS, намного лучше для создания автоматически сгенерированного столбца во вставляют/обновляют время, так как это - единственное время, которое это изменяет.

кроме того, отсутствие триггеров препятствовало бы правилам данных быть осуществленным в DBMS, таком как предварительные триггеры, чтобы гарантировать, чтобы столбцы имели определенный формат. Обратите внимание, что это отличается от правил целостности данных, которые являются обычно просто взлетами взгляда внешнего ключа.

75
ответ дан paxdiablo 4 November 2019 в 15:51
поделиться

Если вы ищете библиотеку с открытым исходным кодом для расчета технических показателей, дайте TA-Lib ход. Исходный код доступен для .Net, Java и C/C + +. Однако версия с открытым исходным кодом не обновлялась с сентября 2007 года, и также существует платная версия Excel.

Если вы работаете в среде .Net и просто хотите рендеринг диаграммы, я думаю, что элемент управления MSC hart (приобретенный у Dundas компанией Microsoft) поддерживает небольшой набор индикаторов TA.

Если вы хотите реализовать показатели самостоятельно, «библия», которая их документирует, Технический анализ от A до Z, 2-е издание (партнерская ссылка).

-121--4013024-

Эта ошибка может быть вызвана только одной из трех причин:

  1. Файл JavaScript неправильно загружается на страницу
  2. У вас есть поврежденная версия jQuery. Это может произойти из-за того, что кто-то отредактировал основной файл или подключаемый модуль перезаписал переменную $.
  3. JavaScript запускается до полной загрузки страницы и, следовательно, до полной загрузки jQuery.

Для проверки правильности загрузки файла проверьте панель Firebug net . Если нет, он будет выделен красным цветом и рядом с ним будет написано «404». Если файл загружается правильно, это означает, что проблема имеет номер 2.

Убедитесь, что весь код jQuery javascript выполняется внутри блока кода, например:

$(document).ready(function () {
  //your code here
});

Это обеспечит загрузку кода после инициализации jQuery.

Последнее, что нужно проверить, это убедиться, что вы не загружаете какие-либо плагины до загрузки jQuery. Подключаемые модули расширяют объект «$», поэтому если загрузить подключаемый модуль перед загрузкой ядра jQuery, то вы получите описанную ошибку.

Примечание. Если загружается код, не требующий запуска jQuery, его не нужно помещать в обработчик jQuery ready. Этот код может быть разделен с помощью document.readyState .

-121--1803544-

Я думаю, что триггеры не только не зло, но и необходимы для хорошего дизайна базы данных. Программисты приложений считают, что на базы данных влияет только их приложение. Они часто ошибаются. Если целостность данных должна поддерживаться независимо от того, откуда произошло изменение данных, триггеры являются требованием, и глупо избегать их, потому что некоторые программисты слишком этноцентричны, чтобы считать, что что-то, кроме их ценного приложения, может влиять на вещи. Если вы компетентный разработчик базы данных, то не составит труда разработать, протестировать или устранить неисправность триггера. Также трудно определить, что триггер вызывает неожиданный результат, если вам (как и мне) приходит в голову заглянуть туда. Если я получу ошибку, сказав, что таблица, на которую я не ссылаюсь в моем sp, имеет ошибку FK, я знаю, даже не думая об этом, что триггер вызывает проблему, и так должен любой компетентный разработчик базы данных.Размещение бизнес-правил только в приложении - это первая причина, по которой я обнаружил плохие данные, поскольку другие понятия не имеют, что правило существует и нарушает его в своих процессах. Правила, ориентированные на данные, принадлежат базе данных, и триггеры являются ключевыми для применения более сложных правил.

18
ответ дан 23 November 2019 в 06:08
поделиться

Идея триггеров - не зло, ограничение вложенности триггеров - зло.

1
ответ дан 23 November 2019 в 06:08
поделиться

Они определенно не зло. Я нашел триггеры ценными во время рефакторинга схем базы данных, при переименовании столбца или разделении столбца на два столбца или наоборот (пример: случай имени / фамилии) и помощи при переходе.

Они также очень полезны для одитинга.

4
ответ дан 23 November 2019 в 06:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: