Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Айдишники в строке  [new]
NoЛюбитель NoSQL
Guest
Здравствуйте.
Есть проблема - заказчик, имевший опыт с некой NoSQL субд, очень желает, чтобы связь 1:m реализовывалась через конкатенацию айдишников в строке через разделитель. Объяснить почему так делать нельзя пока не удается. Про 1NF он не слышал, хочет сэкономить дисковое пространство и избавиться от лишней таблицы. Про sql он тоже не знает, потому не представляет, насколько уродски будут выглядеть запросы в этом случае. Про использование индексов тем более. Любая предполагаемая стратегия аргументации превращается в краткий курс лекций по базам данных.
Подскажите пожалуйста, как кратко и понятно ему можно объяснить, почему в реляционной субд надо делать связи реляционно, а не через ;jge? Очень надеюсь на вашу помощь.
31 авг 12, 12:24    [13093965]     Ответить | Цитировать Сообщить модератору
 Re: Айдишники в строке  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
NoЛюбитель NoSQL,

Он вам платит за вашу работу? Почему говорит как вам надо делать вашу работу?
31 авг 12, 12:32    [13094052]     Ответить | Цитировать Сообщить модератору
 Re: Айдишники в строке  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
Думаю, самый короткий путь - создать 2 тестовых примера с большим количеством данных и показать разницу в быстродействии.
Самый весомый аргумент.
31 авг 12, 12:38    [13094097]     Ответить | Цитировать Сообщить модератору
 Re: Айдишники в строке  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
NIIIK,

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

Пришлось увольняться, промучавшись около года...
31 авг 12, 12:40    [13094110]     Ответить | Цитировать Сообщить модератору
 Re: Айдишники в строке  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Int, записанный строкой, занимает больше места начиная c пятого разряда.

А вообще, имхо, шлите таких заказчиков. Пусть сам делают, раз такие умные.
31 авг 12, 12:42    [13094123]     Ответить | Цитировать Сообщить модератору
 Re: Айдишники в строке  [new]
NoЛюбитель NoSQL
Guest
Все же уточню.
Задача довольно типовая. Необходимо хранить дружбу между пользователями. Сделано стандартно - fkUser, fkFriend (2 записи на одну дружбу), возможно переделать на fkUser1, fkUser2, пока не уверен, будет ли хороший план запроса с or. Профили пользователей пока не храним, только идентификатор фэйсбука, через который идет логин. Связи пока что используются для отображения экземпляров основных сущностей системы, принадлижащих друзьям. Причем написать текущие запросы так, чтобы они работали быстро и с такой вот дикой структурой я могу, в общем-то. (Именно пока, потому что сложных аналитических запросов нет, а заказчик убеждает, что "никогда" и не будет)
31 авг 12, 12:57    [13094261]     Ответить | Цитировать Сообщить модератору
 Re: Айдишники в строке  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
NoЛюбитель NoSQL
Все же уточню.
Задача довольно типовая. Необходимо хранить дружбу между пользователями. Сделано стандартно - fkUser, fkFriend (2 записи на одну дружбу), возможно переделать на fkUser1, fkUser2, пока не уверен, будет ли хороший план запроса с or. Профили пользователей пока не храним, только идентификатор фэйсбука, через который идет логин. Связи пока что используются для отображения экземпляров основных сущностей системы, принадлижащих друзьям. Причем написать текущие запросы так, чтобы они работали быстро и с такой вот дикой структурой я могу, в общем-то. (Именно пока, потому что сложных аналитических запросов нет, а заказчик убеждает, что "никогда" и не будет)


Я дружбу обычно храню как отдельную сущность с двумя участниками дочерней сущностью (равноправные друзья и по факту в одной "дружбе/сообществе/компашке" может быть несколько друзей).


Jovanny
Думаю, самый короткий путь - создать 2 тестовых примера с большим количеством данных и показать разницу в быстродействии.
Самый весомый аргумент.


Ну скажут ему "выбери всех друзей одного пользователя". А потом скажут "других запросов не будет, буду только такие, никаких друзей-друзей или общих друзей не надо" :)
31 авг 12, 13:02    [13094300]     Ответить | Цитировать Сообщить модератору
 Re: Айдишники в строке  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
Хотя "если он платит за время", то можите сначала сделать как он хочет, а потом, когда понадобится "как надо" переделать (распарсить и сохранить все записи в таблицу будет не сложно, особенно если там целостность не нарушена) и фронтэнд возможно переделать, если у вас не хранимые процедуры будут.
Возможно тут даже будет "выгоднее" :)
31 авг 12, 13:04    [13094339]     Ответить | Цитировать Сообщить модератору
 Re: Айдишники в строке  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31956
NoЛюбитель NoSQL
Есть проблема - заказчик, имевший опыт с некой NoSQL субд, очень желает, чтобы связь 1:m реализовывалась через конкатенацию айдишников в строке через разделитель. Объяснить почему так делать нельзя пока не удается. Про 1NF он не слышал, хочет сэкономить дисковое пространство и избавиться от лишней таблицы. Про sql он тоже не знает, потому не представляет, насколько уродски будут выглядеть запросы в этом случае.
Понятно, то есть он проектирует базу, поскольку платит деньги, а вы пишете сам код, поскольку он про 1NF он не слышал, про sql тоже не знает.

Тогда единственный вариант - расставить точки над ё, иначе по любому поводу будет "предполагаемая стратегия аргументации превращается в краткий курс лекций по базам данных". "расставить точки над ё" - либо договориться не объяснять, либо оплачивать эту работу.
iap
есть такие начальнички.
Мне когда-то мой начальник заявил, что я должен писать программы только так, чтобы он всё понимал.
А то вдруг я помру или уволюсь!
Да в общем совершенно нормальные желания и требования, просто лекции нужно оплачивать так же, как разработку.

Если требует начальник, то проблем в общем нет, в рабочее время можно и пообъяснять.

А у NoЛюбитель NoSQL ситуация другая, поскольку он не работник, а исполнитель по договору. Так что либо пересмотр платы, или забить на эту работу.
31 авг 12, 13:40    [13094728]     Ответить | Цитировать Сообщить модератору
 Re: Айдишники в строке  [new]
NoЛюбитель NoSQL
Guest
Может кто знает сокрушительную статейку? Чтобы дал почитать и все дела. Сам гуглил, нашел только 100500 обсуждений на форумах php\MySQL, но там сидят профессионалы экстра класса, которые видят в конкатинации сплошные приемущества :facepalm.
31 авг 12, 13:48    [13094803]     Ответить | Цитировать Сообщить модератору
 Re: Айдишники в строке  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
NoЛюбитель NoSQL
Может кто знает сокрушительную статейку? Чтобы дал почитать и все дела. Сам гуглил, нашел только 100500 обсуждений на форумах php\MySQL, но там сидят профессионалы экстра класса, которые видят в конкатинации сплошные приемущества :facepalm.
Если человек не понимает, что построчная обработка миллионов строк с поиском в строках подстрок и их сравнением между собой
на порядки медленее, чем обработка сервером сразу всех строк с поиском по индексу, то Вам ничего не поможет.
Он хоть про индексы-то слышал чего-нибудь?
31 авг 12, 13:57    [13094878]     Ответить | Цитировать Сообщить модератору
 Re: Айдишники в строке  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
И, кстати, как он представляет себе контроль целостности (непротиворечивости) данных,
если данные хранятся в строке через запятую?
31 авг 12, 13:59    [13094897]     Ответить | Цитировать Сообщить модератору
 Re: Айдишники в строке  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
iap,

Что делать, когда начальник говорит что индексы увеличивают размер БД поэтому не используем?
31 авг 12, 14:07    [13094972]     Ответить | Цитировать Сообщить модератору
 Re: Айдишники в строке  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
trew
iap,

Что делать, когда начальник говорит что индексы увеличивают размер БД поэтому не используем?

Искать другую работу, сказать начальнику , что он не компетентен.
31 авг 12, 14:10    [13095006]     Ответить | Цитировать Сообщить модератору
 Re: Айдишники в строке  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
NoЛюбитель NoSQL,

А у вас идентификаторы целочисленные, а не uniqueidentifier?

Если всё же "прогнётесь", лучше делейте в XML c тэгом по короче

<x><i>1</i>3<i>5</i><i>6</i><i>10</i></x>

там варианты ещё поколхозить будут...
31 авг 12, 14:13    [13095032]     Ответить | Цитировать Сообщить модератору
 Re: Айдишники в строке  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
NIIIK
NoЛюбитель NoSQL,

А у вас идентификаторы целочисленные, а не uniqueidentifier?

Если всё же "прогнётесь", лучше делейте в XML c тэгом по короче

<x><i>1</i>3<i>5</i><i>6</i><i>10</i></x>

там варианты ещё поколхозить будут...


безразлично , можно и в xml со схемой и индекс повесить , мало отличаться от таблицы 1:M будет , и в добавок инлайн фунукцию.

Ну и нахера такой геморой вместо одной таблички со всеми бонусами ?
31 авг 12, 14:17    [13095076]     Ответить | Цитировать Сообщить модератору
 Re: Айдишники в строке  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
Ken@t
NIIIK
NoЛюбитель NoSQL,

А у вас идентификаторы целочисленные, а не uniqueidentifier?

Если всё же "прогнётесь", лучше делейте в XML c тэгом по короче

<x><i>1</i>3<i>5</i><i>6</i><i>10</i></x>

там варианты ещё поколхозить будут...


безразлично , можно и в xml со схемой и индекс повесить , мало отличаться от таблицы 1:M будет , и в добавок инлайн фунукцию.

Ну и нахера такой геморой вместо одной таблички со всеми бонусами ?


Я не сторонник вообще подхода. Я за табличку.
Просто ХМЛ лучше какого-нить CSV в строке.
31 авг 12, 14:18    [13095093]     Ответить | Цитировать Сообщить модератору
 Re: Айдишники в строке  [new]
мимо
Guest
iap
есть такие начальнички.
Мне когда-то мой начальник заявил, что я должен писать программы только так, чтобы он всё понимал.
А то вдруг я помру или уволюсь!
Пришлось увольняться, промучавшись около года...

Правильно сказал. Программист от непрограммиста отличается способностью писать читабельный код( хотя: что писалось "с трудом", то и пониматься должно "с трудом").
31 авг 12, 14:53    [13095409]     Ответить | Цитировать Сообщить модератору
 Re: Айдишники в строке  [new]
не совсем мимо
Guest
мимо
iap
есть такие начальнички.
Мне когда-то мой начальник заявил, что я должен писать программы только так, чтобы он всё понимал.
А то вдруг я помру или уволюсь!
Пришлось увольняться, промучавшись около года...

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


а у нас, например, уже на 2008R2 мигрировали,
но нельзя даже в новых таблицах использовать nvarchar(max),
только ntext,
абсолютно по той же причине:
начальница дальше 2000 ничего не знает,
а чего не знает, то нельзя использовать.

и по той же причине запрещен xml,
его она тоже "не знает".
зато приветствуются курсоры, т.к. у ней богатое ораклоидное прошлое.
linked server считается ругательным словом и называется у нас transparent gateway,
только MS отказывается этим правилам подчиняться и упорно рисует linked servers в объектах сервера.

да, и совместимость баз так и тащится 80
31 авг 12, 15:05    [13095534]     Ответить | Цитировать Сообщить модератору
 Re: Айдишники в строке  [new]
Serg_77m
Member

Откуда: Донецк
Сообщений: 237
NoЛюбитель NoSQL,

а может, сделать как надо, а для показа сделать view с конкатенацией айдишников? Можно даже с триггерами instead of, чтобы обновление работало. Догадается?
31 авг 12, 15:56    [13095948]     Ответить | Цитировать Сообщить модератору
 Re: Айдишники в строке  [new]
ToxDenton
Member

Откуда: Киев
Сообщений: 53
NoЛюбитель NoSQL
Здравствуйте.
Есть проблема - заказчик, имевший опыт с некой NoSQL субд, очень желает, чтобы связь 1:m реализовывалась через конкатенацию айдишников в строке через разделитель. Объяснить почему так делать нельзя пока не удается. Про 1NF он не слышал, хочет сэкономить дисковое пространство и избавиться от лишней таблицы. Про sql он тоже не знает, потому не представляет, насколько уродски будут выглядеть запросы в этом случае. Про использование индексов тем более. Любая предполагаемая стратегия аргументации превращается в краткий курс лекций по базам данных.
Подскажите пожалуйста, как кратко и понятно ему можно объяснить, почему в реляционной субд надо делать связи реляционно, а не через ;jge? Очень надеюсь на вашу помощь.


mother of god...

Какие обьемы?

Поддержу того, кто уже приводил такой пример.

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

Но скорей всего у вашего заказчика есть куча ветхого ПО которое работает именно с Но-скуль представлением.
А вообще не воюйте с драконами, здоровее будете. Имхо
31 авг 12, 17:54    [13096887]     Ответить | Цитировать Сообщить модератору
 Re: Айдишники в строке  [new]
dvim
Member

Откуда: Санкт Петербург
Сообщений: 709
"Вебовцы" вообще это любят
в phpshop так иерархию хранят (в mysql)- жесть и мрак...
Я бы объяснил что в субд надо делать так. именно потому что СУБД .
На крайняк хранил бы связь в двух местах.
31 авг 12, 18:06    [13096952]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить