Я не считаю себя великим специалистом по MS SQL, а уж тем более по СУБД вообще.
Я обычно не требую от продукта хитрых функций. Например, я совершенно верю в сложность эффективной реализации каскадного рекурсивного удаления записей в базе данных. Поэтому я не обижаюсь на MS SQL за то, что он не позволяет установить каскадный констрейнт, например, в иерархических сущностях (ссылка таблицы на саму себя).
Но когда я вижу, что какая-либо функция обрезана по непонятным причинам, меня это откровенно бесит. Хочется видеть мир, где каждое решение логично, а не «потому, что кто-то кого-то за что-то укусил».
Вот, например, вчера в очередной раз столкнулся с фичей MS SQL 2005.
Предположим в базе присутствует такая структура таблиц. Такое часто бывает. Также, часто бывает, что хочется сделать каскадное удаление на всех четырех связках. Так вот MS SQL этого сделать не дает, мотивируя тем, что могут быть “cycles or multiply cascade path”.
Кто-нибудь мне может рассказать, что может быть страшного, если строку из D нужно будет удалить сразу по двум причинам? СУБД умрет в муках буриданова осла, пытаясь выбрать одну из них? :-)
Есть ли такие особенности в других СУБД?