Previous Entry Share Next Entry
2016-01

Про SQL и любителей всё структурировать

"Customer has nationality Kosovo but the country is missing, see also screenshot"

via http://sergiej.livejournal.com/410807.html

This entry was originally posted at http://wizzard.dreamwidth.org/365288.html. It has comment count unavailable comments. Please comment there using OpenID.

  • 1
gds April 8th, 2014
изначально надо смотреть, как далее используется это поле. В некоторых случаях значение вида "хуйпизда" вместо национальности может оказаться негодным.
Да и нет проблемы -- добавить в справочник и всё тут.
То есть, наезд непонятен мне.

the_aaa13 April 8th, 2014
Важно различать национальность и гражданство.

gds April 8th, 2014
в данном случае это не относится к наезду.

the_aaa13 April 8th, 2014
Разумеется относится. Национальность - явление сложно формализуемое. Гражданство - прямое отношение принадлежности к государству. По этому отсутствие соответсвующего национальности государства - интересное обстоятельство, а отсутствие соответствующего гражданству государства - прямой и наблюдаемый фак-ап.

gds April 8th, 2014
гражданство не очень прямо относится к государству -- у меня два гражданства, например.
Отсутствие государства -- не факап, а признак того, что его нет в соответствующем справочнике государств, и это обычный "вопрос в рабочем порядке". Наезд на структурирование всё ещё непонятен.

mbr April 8th, 2014
Отсутствие гражданства вполне себе допустимая бюрократически ситуация.

the_aaa13 April 8th, 2014
Как то что у вас два гражданства противоречит тому что гражданство - прямое отношение принадлежности к государству? Или вы являетесь гражданином несуществующего государства?

gds April 8th, 2014
то есть, ко второму абзацу комментариев нет?

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

the_aaa13 April 8th, 2014
К первому вопросу комментариев нет?

gds April 8th, 2014
есть. Гражданство человека не "один к одному" относится к государству. По остальному согласен.
Тем не менее, наезда из поста не понял.

wizzard0 April 8th, 2014
> наезда из поста не понял.

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

Я лично за то, чтобы в базу МОЖНО было напихать херни, а валидация происходила уже по результатам квери/в момент выполнения квери.

gds April 8th, 2014
а как потом приводить данные в порядок, если это понадобится? Чьими руками? Пользователей заставлять это делать? Особенно забавно было бы поглядеть, как это будет на каком-нибудь сайте происходить.

Да и про валидацию непонятно. Вот есть какой-то отчёт, допустим, по национальностям. Напихали разного. Как теперь сливать "руских" и "руSSких", чтобы показать общую статистику (обычное бизнес-требование), если в первом случае -- орфографическая ошибка, а во втором -- типичный тупак?

Если смотреть чуть более глобально, тут идёт распределение проблем и ответственности.

Если данные не валидируются изначально, то проблемы у тех, кто хочет получать отчётность из них, и ответственность у кого-либо из пользователей, программистов, операторов по поводу их исправления, причём для каждого варианта неправильного значения (про руских из примера выше -- 2 исправления).

Если данные валидируются изначально, то проблемы у реализаторов валидации (обычно небольшие изначально); какая-то поддержка от "операторов НСИ", как в примере из поста, тоже требуется; и на них ответственность за кривые данные. Неправильные значения либо не вносятся, либо исправляются ровно одним движением руки, а не "для каждого неправильного значения".

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

worm_ii April 9th, 2014
А если смотреть со стороны бизнеса, то может оказаться так, что по большому счёту отчётность никому не нужна.
Но если часть потенциальных покупателей не смогла оформить заказ (или пришлось вбивать неверные данные, что портит впечатление и, кстати, искажает ту же отчётность), то это факап посерьёзнее.

beldmit April 8th, 2014
Ага. Много раз видел в списке регионов Екатеринбургскую область в результате такого подхода. С другой стороны, дата 1954-02-29 в реальном документе вполне может встретиться, и опаньки.

109 April 8th, 2014
> Я лично за то, чтобы в базу МОЖНО было напихать херни, а валидация происходила уже по результатам квери/в момент выполнения квери.

у каждой проблемы есть простое, очевидное, и совершенно неправильное решение :)

иногда можно делать так, как ты говоришь, но чаще нельзя. it all depends.

sab123 April 9th, 2014
Наверное правильный подход - чтоб можно было записать что угодно, но чтобы оно при этом пометилось как неправильное и потребовало явного подтверждения. И потом иметь специальных людей, которые будут разбираться со всеми неправильными случаями и так или иначе превращать их в правильные (или изменением данных или изменением правил проверки).

109 April 9th, 2014
чтобы можно было записать что угодно, надо, чтобы никаких констрейнтов в базе не было. для опытного датабазника это звучит примерно как "все велосипеды должны быть трёхколёсными". да, иногда это makes sense. гораздо чаще - нет.

sab123 April 9th, 2014
Если очень хочется, можно завести отдельные таблицы для неправильных данных. Но вообще да, от констрейнов обычно больше вреда, чем пользы.

109 April 9th, 2014
ну вот опять :(

слова не мужа, но мальчика.

базы бывают разные, с сильно отличающимися требованиями и характеристиками.

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

sab123 April 9th, 2014
Непонятно, как он их использует. Индекс или есть или нет. Если индекс есть, то он ничуть не хуже и не лучше констрейна.

Ну и вообще, оптимайзер - штука в общем случае бесполезная, все равно планирует криво. Все равно во всех больших запросах нужно писать явные хинты.

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

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

Список через пять лет что-то потеряет, что-то приобретёт, в МИД разных стран - разные списки, у кого-то два гражданства, а кто-то вообще кот.





Edited at 2014-04-08 11:40 am (UTC)

mbr April 8th, 2014
nationality это гражданство :) Национальность спрашивают только в некоторых озабоченных мусульманских странах, в надежде, что какой-нибудь идиот напишет туда "еврей"

mbr April 8th, 2014
Ответ ссылкой без объяснений считаю хамством :)

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

Национальность - в большинстве своем статистическое. До внесения записи в базу упоминания о нем может и не быть. Про некоторые национальности государство узнает только в процессе переписи. Например, в России, внезапно, объявилась национальность сибиряк. А есть еще более помешанные вроде джедаев и темных эльфов.

wizzard0 April 16th, 2014
> Ответ ссылкой без объяснений считаю хамством :)

Приплыли. Это ведь ссылка в рамках этой же страницы.

mbr April 8th, 2014
В свою бытность, когда я внедрял в посольствах РФ бухгалтерию, мы вынуждены были название страны поменять.

Какой-то мудак программист не подумал об экранировании. С тех пор Кот-д'Ивуар во всех отчетах без апострофов.

jakobz April 8th, 2014
Всякие Sarah O'Hara еще не очень живут.

_winnie April 8th, 2014
Да, у жителей крыма будут странно работать время, языки, валюты, ... на всяких мобильных девайсах.

beldmit April 8th, 2014
Во время оно я отправил в рассылку компании письмо "XXX признал Абхазию и Южную Осетию".

Собственно, пришлось это сделать после того, как попытка записать гражданина Южной Осетии как россиянина из Осетии Северной, предпринятая особо хитрым менеджером, не прошла. Причем не прошла на фазе верификации формата номера паспорта как российского.

  • 1
?

Log in

No account? Create an account