Пишем код, за который не стыдно. Разбираем базу, даем рекомендации и встречаемся с умными людьми
Привет друзья с вами Кирилл Макевнин ведущий подкаста организованное программирование тема сегодняшнего подкаста проектирование баз данных которую мы обсудим вместе с Алексеем Махоткин. Лёша с девяносто шестого года занимается базами данных но для меня это немножко другая история потому что с Лёшей мы познакомились если я не ошибаюсь в начале в 2000 по-моему де или 11м году и именно он стал тем человеком он был техническим директором компании анв про которую я немало говорил именно он меня взял тогда на работу и в общем-то благодаря нему я перекати в Руби и очень многие вещи Которые случались потом и про которые я в том числе рассказывал и вы наверное про это помните и знаете кто видел этот подкаст и читал те вещи которые я пишу они так или иначе связаны с Лёшей поэтому для меня это какая-то в каком-то смысле мы уже посмеялись на этим до подкаста эта встреча так сказать подава на с мастером спустя много лет вот так что я очень рад что сегодня он пришёл и с нами будет разговаривать Лёш привет Вот мы с тобой спустя 10 лет а так сказать встретились и а Я знаю ты мне об этом уже писал да О том что ты занимаешься базами данных Ты много чем занимался в том числе был редактором не безызвестный книжки tle которые как минимум Ну я знаю некоторых людей у которых он как минимум поддерживает а ноутбук Да потому что там не всем дано прочитать эту книжку и я помню когда ты пришёл в какой-то момент ко мне и сказал что вот у тебя есть интересная тема связаная с проектированием баз данных которые там и для новичков И не только да моделированием и в общем-то мы договорились собственно о подкасте И вот сегодня мы попробуем в течение дву дней эту тему расписать Да и туда у нас входят как бы и вообще общие какие-то концепции и некоторые твои идеи да которые ты туда внёс для того чтобы делать это лучше качественнее быстрее эффективнее безопаснее расширяемый и может быть ещё какие-то правильные слова которые ты хочешь назвать Привет Спасибо за приглашение упоминание типов в языках программирования - это конечно по волнам памяти скажем прямо и Я бы начал вот с чего то есть мы когда берём вообще проектирование баз данных мы сейчас говорим не про новичков да то есть про тех людей которые в принципе уже что-то умеют но в любом случае это не отрицает того что когда например они не знаю например надо сделать Новый сервис кто-то решил сделать стартап Ну то есть любой какой-то проект То есть как правило Люди уже там понимают что-то про сущности что-то про нормальные формы Да накидали прикинули связи сделали и погнали на самом деле не всегда это происходит легко и просто то есть человек может быть сделал Но там из-за недостатка опытов из-за того что он не до конца просчитал бизнес поговорил с бизнесом или сам понял бизнес может оказаться что Спустя какое-то время оказалось что то что он заложил сложнее немножко не в ту сторону появляются костыли и пошло поехало и соответственно он такой думает о надо было раньше принимать правильные решения А их можно было принять если бы он задавал правильные вопросы например и я знаю что тебе есть по этому поводу что сказать и Давай в это погружаться да Вот в этой ситуации люди в принципе делают одну из двух вещей зачастую Первое - это сразу проектируют табли
ВС такое А второй вариант - это когда люди начинают с чего-то типа диаграммы то есть такого графика на котором значит прямоугольники Соединённые линиями с такими характерными нотация заходя сразу это самый можно сказать что я предлагаю некий третий спосо вору которого будем
Ещё я хотел упомянуть что ты сразу конечно сказал что вот постепенно возникает некое сожаление на тему того как ты это сделал раньше и что вот возникает Вот это такое характерное чувство такое блин вот надо было по-другому делать Вот я как раз недавно написал пост про эту рассылку про так называемого Демона дейта соответственно и мой тезис состоит в том что избежать этого невозможно что бы ты не делал Каким бы ты ни был опытным или или не опытным человеком это тоже это позитивная часть программы вот у тебя этого не получится избежать вот ну это правда потому что Знаешь что самое интересное самое интересное что как раз ты Чем более опытный тем больше у тебя сомнений и тем больше типа вопросов потому что опять же вот я учу людей и я всегда над этим как бы мне это всегда веселит потому что как правило новички Часто вообще твёрдо уверены в том что как происходит как работает люди более опытные чуть Ну сильно больше сомневаются и больше задают вопросов и всё остальное да то есть хотя Казалось бы вроде по идее должно быть наоборот но нет именно так это работает Окей давай будем погружаться вовнутрь если у тебя какая-то общая история или мы с тобой зайдём через какой-то конкретный пример с чего всё началось вот я где-то примерно лет пять назад начал как бы думать о том что вот Пора значит скоро на пенсию в принципе и А надо как-то начинать ризова то что я знал за С того самого 1996 года мы как подход к моделированию и к проектированию баз данных называется моден соответственно вот и он состоит в том что мы все любые базы данных представляем в виде набора из четырёх логических элементов Ну в смысле списков логических элементов этоке так называемые
обычно называются это атрибуты это линки которые обычно иногда называются relation и то что я называю вторичка соответственно то есть разного рода порождённые данные вот я читаю такой subit Database и там очень много таких вопросов там приходят люди и такие типа я как бы мне надо написать например там я не знаю систему бронирования времени персональных тренеров для мне заказа Я умею там программировать на п но никогда не делал баз данных соответственно Я понимаю что нужно сделать какую-то базу данных Като таблички А какие что делать собственно говоря вот и мне кажется что на самом деле ответ на этот вопрос он не всегда что лиже этот с ше обни как это делать то есть более более надежно с той точки зрения что ты какой критерий ты смотришь на эту базу данных свою собственную которую ты только что сделал и у тебя возникает вопрос А я правильно её сделал собственно говоря кто мне скажет что она правильно получилась И вот ответ на этот вопрос он на мой взгляд самый важный правиль здесь очень широкое слово понятно Ну давай Попро зам [музыка] вори хороши Я бы вокруг этого кейса и строил Ну да у меня есть два направления в рамках вот работы с в рамках моделинга это первое это когда у тебя есть готовая база данных в которой типичные несколько сотен иногда несколько тысяч таблиц разного рода разбросанных также по разным базам данных как бы Как таковым часто по разным серверным реализация соответственно вот и ты как бы ходишь условно говоря в проект в компанию и у тебя такой типа вот тебе схема Вот тебе доступ в базе типа Разбирайся соответственно Вот первый вопрос - Это как разобраться а вторая половина рассуждений размышлений вокруг мин моделинга это вот для начинающих скажем так для начинающих проект и для начинающих вообще ну делать проекты Да с базами данных то есть типа как сделать такое описание что те самому в первую очередь было понятно что она действительно имеет смысл в первую очередь она соответствует твоему бизнесу твоему проекту твоей задаче вот а вторая часть - это техническая То бишь как бы Правильно ли у меня сделаны таблички соответствуют ли они нормальным формам там типа будут ли они проводит
по пропустил Соответственно что мне потом придётся через там какое-то время вдруг внезапно переделывать вот если брать Вот эту вот историю с резервированием она у нас с тобой с нуля поэтому давай попробуем вот зайти с этой стороны Угу первый вопрос значит сначала тебе надо написать некий текст объясняющий что собственно говоря ты делаешь этот текст Значит тут Важно Нигде у меня нет такой темы что типа знаешь как вот такое ощущение что ти есть такие вот да такие документы страниц на 35 или 50 в которых значит вот с такой типичной занудный дотошность значит изложены какие-то вещи там такие вот ну как вот все ТЗ да типа ТЗ страшное слово на самом делете достаточно нать пару абзацев То есть это реально зависит от твоего Ну натурально размера твоего бизнеса Я подозреваю что вот для там какого-нибудь бронированию в Джима Ну что у нас есть значит спортзал в нём работает несколько тренеров эти тренеры специализируются на разных вещах там лифтинг пилатес там и тому подобное они работают по таким-то дням и у них есть такое количество как бы слотов да соответственно ли Мы хотим чтобы эти клиенты заказывали бронировали этих самых инструкторов оплачивали их собственно всё типа вот ну и там у нас на сайте будет какой-то календарик типа ты можешь там искать инструкторов по их скилам и по их там смотреть какую цену они берут там может быть в разное время у тебя будут разные стоимость совестно слота подо вот что что ножен сказа нанимаю программиста пря тебя например да я изложил тебе что мне надо да те понят задача Ели у тебя какие-то встречные вопрос Т Да Поня дело что мы вс-таки опытные Ребята с тобой разные системы делали вопросов там
потому что у тебя бронированием может заниматься несколько одновременно человек соответственно у тебя там тоже возникают определённые проблемы скорее всего у тебя будет разделение ролей менеджер не менеджер даже если этого не будет это точно надо проговорить потому что главная история здесь же про риски в том числе Да что если кто-то имеет прямой доступ что он сделает или опять же история этого добра Может ли бронировать сам клиент имея какой-то интерфейс или он это делает просто говоря тебе а ты уже это там вставляешь потому что это же тоже система брони кстати в этом плане можно эльку тогда использовать Google таблицу вообще начать с этого это хоро это правда И исеки кстати совершенно укладываются во всю эту как бы концепцию то есть всё это надо понимать что весь этот как бы подход он абсолютно не требует никакой знаешь вот типа реляционной базы данных то есть реально там например в МК можно выразить Чере э самые че вещ анкеры линки атрибуты вторичку соответственно есть реальное применение Ты будешь смеяться есть реальное применение где люди бронируют номера в неком отеле типа ну такой гостевой домик понятное дело ну домики типа вот и люди по этим эльм делают отч соответственного
собственно говоря Ну как бы понимают его в виде мин моделинга вот вопросы которые ты задал они верны для разработки то есть типа чтобы вот не получилось Сколько нам надо условно говоря на программировать Кода да типа проверяющего кому что можно кому что нельзя но с точки зрения базы данных и они наверное может быть имеют какое-то отноше Ну какую-то будут какой-то иметь эффект на схему базы данных но давай пока как бы Ну начнём Ну я понял ближе к моделированию предметной области самое интересное что когда я тебе говорю я это тебе говорю скорее не как разработчик а именно вот я знаешь исхожу из учёта бизнес рисков грубо говоря Потому что ты понимаешь ты делаешь потом кто-нибудь всё удаляет и все там такие а с паникой то есть скорее я вот исхожу из учёта этого Но если ты говоришь про моделирование именно внутренней системы то действительно у тебя там что появляется Ну действительно возможно перебронировать отменить Вот это добро знаешь я с чем сравниваю Кстати у меня вот с Джимом я может и не сильно работал но у меня есть этот я постоянно это делаю для стрижки То есть у меня есть приложу Да где я постоянно делаю Я только сейчас вспоминаю какие там ещё штуки оплата здесь не при чём Ну самое главное посмотреть это расписание подписаться Да господи и всё Ну наверное в теории опять же не уверен что это на базу ляжет Это история про то что если у тебя со стороны как бы тренера пошло что-то не так но это не отразится на базе данных То есть я вот так вот сходу не думаю что это прям связано Ну кроме того что не знаю причину переноса Кстати то что потом нужно будет для аналитики то есть Понятное дело что если просто В тупую делать да А кто это сделал поэтому тут Конечно надо тоже наверно учитывать но как будто бы это следующий уже шаг после того как мы саму суть зацепи да да И это кстати правда это всё очень верно и я бы сказал что ещ одна веь которую вот Большая такая идея которой я стараюсь придерживаться как мне кажется много многие люди сильно сфокусированы на как это переднем фронте соответственно То есть у тебя Ты как будто Такой типа вот мы сделали вот эту систему внедрили её и мы как бы умом понимаем что она дальше будет жить и развиваться но мы как будто бы типа немножко дисконти Вот это то что в будущем будет потому что мы хотим Сейчас её внедрить и это в принципе логично Ну нам дест важнее может быть её как бы чтобы оно заработало а потом будем думать что там всё равно думать придётся да А то может мы закроемся и проблемы не будет соответственно Вот Но с какой-то вероятностью нам придётся думать о том как добавлять Вот все вот эти вот то что ты говоришь причины переноса проблемы у тренеров и тому подобно я это к тому что важно важной вещью всей этой истории все этой всего этого подхода является то что мы мы сразу думаем про эволюцию базы данных то есть нет никакой проблемы сделать Сначала чтобы заработало Да а потом уже добавлять к этому платежи проверку доступа переносы аналитику какие-то е фи и тому подобно мы это тоже вот Как мне кажется у многих программистов скажем так вот есть такой частый Потер когда вот Ну опять же ТЗ Да вот как бы тебе дали ТЗ ты как бы его реализовал и процесс изменения этого ТЗ он очень часто сопряжён с таким как бы какой-то начинается какой-то какая-то торговля какие-то Значит у нас уже сроки горят и вы хотите чтобы мы это изменили Да и поэтому люди как бы интуитивно пытаются сразу зафи такую как бы как можно больше сделать Ну вот как бы утвердить прямо сейчас чтобы Значит потом меньше это тоже интересно да да бюрократия тут тоже получается очень сильный оттенок я знаешь что хотел сказать Вот меня действительно всегда волновал этот момент и вопрос он связан очень сильно как раз вот с этой областью когда достаточно когда нет то есть ове инжениринг потому что каждый раз когда про это говорят очень разные люди по разному реагируют да то есть некоторые да ребята Это кошмар это Овер инжениринг и действительно там легко в это упороться то есть там где у тебя связь там не знаю один ко многим Люди сразу многие ко многим А вдруг в будущем понимаешь там всё это будет меняться и самое смешное что в таких случаях как бы правильного ответа честно говоря нет тут очень важна интуиция и я точно знаю что супер работает именно специализация именно по не не в смысле я крутой программист а в смысле я всю свою жизнь занимаюсь созданием не знаю вот этих систем для спортивных залов и просто знаю Да к чему Какие штуки приводит это очень помогает в таких вещах Ну например я занимаюсь образованием Я очень хорошо разбираюсь в МСХ и это сложная штука и человек со стороны он конечно не поймёт когда Какие вещи возможны там ну там своя предметная область Да там у кого-то ещё предметной области Но Я знаешь что вот именно по поводу баз данных просто хотел сказать Вот я валидировать как бы твой подход на своих своём восприятии я сейчас понял что это очень похоже на краш-тест То есть например думать о базе данных в будущем не является оверин неринга потому что это просто мыслительный как бы упражнения ты можешь посидеть часик покрутить будешь ли ты это всё реализовывать Нет я сейчас понял что мне это напоминает краш-тест То есть ты сдаёшь базу данных а потом начинаешь кинул значит сбоку спереди на скорости 110 миль в час В общем смысл в том что ты вот как ты правильно сказал ты закладывает такую структуру которую легко будет эволюционировать вперёд Ну как легко Я имею в виду по крайней мере ты видишь возможные как бы варианты развития ты их в голове покрутил и ты понял чего тебе встанет этот в том или ином случа но это не значит что ты пошл и это сделал Но по крайней мере на текущем уровне это даже банально знаешь когда речь идт о типах колонках Да когда у тебя два состояния такой ой сейчас Булин воткну а потом у тебя будет третий соответственно изменить вообще-то тип колонки это тебе вот ни фига не просто так и скорее всего может быть имеет смысл сразу сделать будет сложнее ливер женик вряд ли в данном случае это ничего не поменяет Ну вот какие-то такие вещи Да я всегда точно делаю прокручиваю Это в голове некий такой микс знае между типа вообще об этом не думать и типа сейчас я создам систему которая будет обслуживать Ну понятно что в как это называется в пределе у тебя всё совсем связано да и у тебя получается Мега сложная система где все сущности промежуточного с другом соединяются Ну когда знаешь начинают придумывать так А ещё у нас с этой стороны может быть множество этих и этих ещё всё меняться может А если вдруг произойдёт такая ситуация то есть люди начинают придумывать огромное количество гипотетических ситуаций которых в жизни скорее всего не произойдёт А изза сложно потом у тебя очень сложные интерфейсы и каждая фича гораздо сложнее ты очень круто Сейчас ты как бы притащил в нашу обсуждение нашего проекта вот этот вот тоже характерное такое непонятно что будет в связи всех со всеми какое-то Вот есть это тоже как мне кажется очень характерная такая штука которая приводит к разного рода проблемам в реализации и в дизайне какой-то ужас перед будущим как бы некий Такой типа ты сказал такую фразу я хочу чуть вернуться что легко вносить изменения тут важно понимать что я Ну это будет так легко или так сложно как оно будет это не означает что я предлагаю какую-то систему в которой вносить изменения будет всегда легко их будет вносить так как их будет вносить Вот это первое потому что иначе мне условно говорю Ну как Типа если кто-то это поймёт так то мне естественно не поверят и это правда потому что я этого не говорю типа у тебя действительно если ты ошибся либо в кардинальность Линка А это по-моему самое на самом деле главное ошибка проектирования тут слово ошибка Оно такое немножко сомнительно Но скажем слово ошибка Вот это по-моему самая главная ошибка проектирования а второй когда у тебя меняется тип колонки это иногда это недёшево изменить скажем так не не тривиально изменить так вот Это первое Второе про твою вот э связи всех со всеми Дело в том что тебя в рамках значит модельного подхода у тебя вот это твоё это твой ужас перед будущим он будет на самом деле
давам значит СБК представим что у нас с тобой Джим в котором работает 10 человек все друг друга знают нет никаких пока корпорация из этого не строится соответственно типа поэтому мы вот просто нам нужно чтобы не возникало мы задолбались когда условно говоря люди случайно там тренер договариваются с двумя клиентами они оба приходят и как бы кто-то уходит обиженным да мы решаем типа Давайте наконец-то сделать чуть-чуть получше Да как бы систему трекинга мы действительно можем её сделать в эксели но Давайте говорим про какую-то базу данных так вот вот значит я наговорил Там вот это такое ТЗ неформальное Да как бы в виде на чистом значит английском языке первое что нам нужно сделать - это найти в нём так называемые анкеры которые обычно называются entities но слово entity как мы знаем в программировании абсолютно всё это либо ти либо object соответственно Да как бы и поэтому мы я прямо не пользуюсь этим термином но естественно его все знают вот а вот акор в данном случае это прямо твоя терминология или она нет А я её честно утащил из Так называемого ancor modeling а это известная в некоторых кругах система дизайна баз данных она была создана где-то в начале нулевых и её создавали для тогдашних больших
алапорт нулевых Там они там ну какие-то с гордостью пишут какие-то вещи там типа мы успешно внедрили этот подход в огромной базе данных размером 6 Гб соответственно Да вот ну и ты конечно понимаешь что это была вообще нормальная была база данных на огромна скажем прямо вот а значит Mod устроен Так что в нём Каждый элемент То бишь а Link и атрибут находится в своей собственной таблице То есть у тебя нет ситуации когда у тебя есть например таблица юзеров в нём есть имя дата рождение и тому подобное то есть четы колон тебя есть а табли в которой хранятся шники юзеров таблица US в которой две колонки шник и имя у тебя есть таблица Юр дни рождения Ну и так далее А если у тебя есть какой-то Линк неважно какой кардинально либо 1 к либо на он всё равно хранится в одной своей двух табличке соответственно для меня аке моделинг вообще собственно был прям я с него начал на самом деле я прочитал его и меня прям накрыло типа я всё это было очень круто Типа оно прямо сильно прояснилось одна проблема в Ар моделинге он почему-то физический они прямо говорят что типа вот вам вот каки таблички вы вы их вот так вот и дизайни я как бы как ты понимаешь Ну вот я тебе при ти в твою большую компанию скажу Кирилл давай переделываем всё на вот эту схему Да что ты мне скажешь правильно У нас тут чело Мы вам перезвоним Да соответственно вот может быть тебе в отпуск съездить скажешь ты мне соответственно и тому подобное Вот Но как мы понимаем
амзи у нас же это любая проблема решается С взятием следующего уровня абстракции и после этого фишка у меня попёрла потому что ты берёшь любую базу данных и ты видишь в ней вот эти самые одно колоночки и двух колоночки которые ты как бы типа ну в Юха Да например то есть ты можешь сказать там вот если у тебя есть обычная таблица юзеров Да там с четырьмя колонками стандартная то ты можешь сказать ID From users Вот это твой а потом ты можешь сказать Select ID зата name From users вот твой атрибут имя пользователя и точно также соответственно все линки у тебя так извлекаются да и тому подобное Ну понятно что иногда бывают такие конфигурации как бы Когда прямо Select написать нельзя ну можно это неважно всё равно ты как-то знаешь где-то там вот духовно Да как бы в чертогах разума всё равно есть как вот это двух колонок можеть ть какой-нибудь скрипт который будет поддерживать рядом такую табличку специальную в которую просто ну синка постоянно вот состояние как бы вот этого элемента данных и как только Я вывел это на логический уровень жизнь прямо наладилась соответственно и из этого стало вытекать прямо Дикое количество разных великолепных последствий опять же в обе стороны либо извлечение этого из существующей базы данных Либо наоборот создание логической модели и дизайн физической базы данных на её основании у нас есть вот этот самый два-три параграфа абзаца про то какие у нас требования к этой базе данных что мы делаем мы извлекаем мы начинаем с того что находим анкеры анкеры - Это обычно существительные поэтому мы такие начинаем Ага значит есть тренер есть клиент есть Скил есть бронь наверное да как бы Слот а нет Есть Слот А есть бронирование этого слота Да ну сам спортивный зал Несмотря то что он один он есть Ну может быть сейчас Значит тоже ну как бы типа надо держать там в рамках п плюс минус два поэтому этот Значит тут тут тут сейчас нам не надо сразу всё искать опять же мы просто сейчас нанм дальше с этим работать и ну смысле извлекать чтото пропустили это из вещей которые работат этом подходе ты можешь что-то упустить а потом ты начинаешь формулировать какой-то очередной элемент и ты видишь что он не складывается и такой Значит я забыл вот это как мы понимаем что анкер - это анкер ответ мы их можем посчитать
добавить е одного это важный для некоторых вещей критерий для некоторых модельных кейсов то есть мы можем нанять ещ одного Ну там старый Может там уйти Но это неважно соответственно вот проверяем дальше значит клиенты Ну очевидно у нас там 100 клиентов и мы вот сегодня пришло ещё три да слоты у нас там
за каждый день условно говоря добавляется не знаю четыре слота на каждого этого на каждого тренера Да ну или у кого-то по-разному как бы всё тоже понятно типа наши тренеры за отчётный период отработали 175 тренеров слотов Да соответственно то есть мы можем посчитать это и так далее мы для каждого такого анкера мы проверяем вот мы прям вот ну если мы начинающие совсем Да тут же как когда ты начинающий ты едешь на Ездишь на велосипедике с этими колёсиками соответственно да типа они тебе помогают через какое-то время они тебе становятся ненужны они у тебя типа отбрасываются Здесь тоже самое люди хоть сколько-то опытные очень быстро уже видят как бы Какие таблицы за этим всем идут да типа Но мы же ещё хотим чтобы вот натурально человек который типа вот на ПП программировать научился А эти таблицы как бы Какие таблицы он не знает Какие таблицы вообще вот поэтому нам надо дать тот начальный или заход Как как бы подтвердить что ну ну как бы ответ на тот вопрос а моя база данных правильная и вот эти два предложение - это один из первых инструментов того как понять что твоя база данных правиль если это можно посчитать и увеличить значит это ан Ну то есть опять же когда мы говорим про опытных ребят Это скорее у тебя уже просто по наитию всегда происходит Да здесь можно просто наружу вытащить этот эту мысль про наити - э фраза хорошая но у неё есть другой аспект
в Кома тедо тво наитие передать другому человеку и тво наитие может оказаться неверным Потому что ты например недостаточно дослушал бизнес и в сложных случаях это тоже будет видно А да значит заметим что мы пока неки таблички мы не говорим у нас пока существует понятие анкеров забегая вперёд мы можем сказать
что ээ Ну ну просто я так чтобы типа как бы знаешь твёрдую землю под ногами иметь что мы не уходим куда-то там в логическое в супер логическое проектирование как это иногда бывает Значит вторая часть атрибуты атрибуты - это то где хранятся данные заметим что в анкерах Никаких данных не хранится мы вообще ничего не знаем о том пока что что там в этом у тренера есть что у клиента есть что за слот типа и тому подобное мы только знаем что их сколько-то ти вот атрибуты хранят непосредственно данные ти например имя клиента и не имя тренера у слота например есть время когда этот Слот состоится Да а скилы тоже понятно анкер потому что решаешь уйти в Ну как бы добавить тренеров йоги да Ты создаёшь новый Скил ганима тренеров и Они получают свой Скил совестно то есть тоже как бы наши тренеры умеют восем разных подходов к оздоровлению человека Да а вот недавно появился девятый подход Как нам понять что наш атрибут правильный мы задаём вопросы специальной формы обычно мы с тобой как мы говорим типа там имя тренера Да там время слота и тому подобное Но для проектирования такие табли используем несколько этих самых для того чтобы понять правильный ли у нас атрибут мы задаём вопросы Мы говорим Каково имя этого тренера На какое время назначен этот Слот Как называется этот Скил мы так делаем Потому что есть кейсы где Если ты просто говоришь имя тренера без вопросов то ты можешь упустить важную часть моделирования самый простой пример - это менеджер У тебя есть сотрудники у них есть менеджеры вот если ты говоришь менеджер сотрудника то ты пропустишь тот факт что это не атрибут это Лин потому что он соединяет двух сотрудников в да про атрибуты Мы ещё знаем какой Ну можем сказать какой у них тип но Это логический тип Ну то есть типа имя - это строка время слота - это время Ну и так далее есть всякие логические ариу пользователь админом и тому подобное Можно я тебе сюда добавлю хорошо А например состояние какой-то штуки анкора например Слот у тебя занят не занят да есть Вот у меня это называется или или или Ну в базах данных обычно называется им понятное дело набор из какого-то небольшого количество статусов заказ создан оплачен в доставке там отменён и тому подобное вот такого рода Да это есть это соответственно Я просто имею в виду что эти вопросы когда речь идёт про какие-то процессы Да вот эти вопросы они отличаются То есть ты как бы Когда про это думаешь долже быть явная чёткая в голове вот эта картина что существуют атрибуты а существуют процессы в которых участвуют эти анкары понимаешь да и просто так ты их не задашь если у тебя нет этого в голове вот картинки такой ну Яме в виду они выпадают да то есть говоришь Какое имя тра-та-та вот догадаться что надо спросить себя а Слот бывает заняты или нет требует неких дополнительных усилий А вот мы сейчас ответим на этот вопрос Нужен ли нам эту вот Ну вот это типичный да твой вопрос типичный Как как нам понять типа не пропустили ли мы чего-то этот же вопрос Он же всегда есть Ну у любого человека хоть он начинающий первый раз в жизни вообще всё это видит и либо он я не знаю работает с овертаймом над огромной системой и пытается понять придётся ли ему там потом какую-то миграцию гонять соответственно вот третья часть которую мы делаем э логическая - это линки линки соединяют два анкера например ну какие скилы есть у каждого тренера для того чтобы задать правильно и проконтролировать правильность Линка мы используем пару предложений формализованных Ну слегка формализованных как бы и в них используются эти самые ключевые слова несколько и только один мы говорим тренер обладает несколькими скиллами и во втором направлении Скил может быть у нескольких тренеров Да так как мы в обоих случаях использовали слово Несколько Ну в смысле Да вбо в обоих предложениях то это означает что на выжа терминах Карди Таким образом мы зафиксировали самую главную веь значит пример того Какой например может быть Линк о на посты и комментарии у поста может быть несколько комментариев и в обратную сторону один комментарий принадлежит только одному поступ
Отт вопервых косики Т велосипедные во-вторых мы когда говорим вот эти вот эти слова Мы на самом деле прислушиваемся к ним и пытаемся понять вообще ерунду ли мы несём да соответственно Или например тебя вот бизнес послушает скаже разработчик может принимать участие только в одном проекте вс-таки это в одном проек показало
такой вот неформальной ТЗ и тебе показалось что это так типа как бы Человек сидит на одном проекте Да ну как зна каких-нибудь может быть аутсорсе компаниях вот и тебе могут сказать что значит выводил нет в нескольких Или наоборот Ты говоришь типа что как бы я сейчас сделаю Значит на будущее Да ну вот вот это вот то что ты говорил типа что люди на вырост иногда пытаются сделать м да как бы что типа Ну мало ли а потом решим что тут не один у меня такое было У меня бы Т такой кейс продаже каких-то страховок Типа такого и там такой одним контрактом управляет один менеджер я такой М что серьёзно что ли А если он типа в это ну вот пошёл типа как бы что значит типа клиенту делать и А я Почем так зашёл Такой типа ну смотри вот здесь что типа что у вас типа А если вот как бы как вообще и чек говорит нене не это прямо супер важно потому что типа прямо вот короче менеджер за эти контракты они значит это и тебе значит глотку пере и другим значит Поэтому прямо серьёзно всё Поэтому проговаривая ты Оказываешься более уверен в том что это отражает бизнес соответственно и на уровне твоего понимания и так далее но я не могу не добавить всё равно Алёш знаешь вот сколько ты с этим работаешь всегда понимаешь блин насколько там даже вот то что ты рассказываешь я понимаю чем это помогает это очень похоже Да вот на просто хороший об еди язык для описания требований Да который позволяет такой компактный маленький понятный который может помогать В таких ситуациях действительно я уверен что поможет Но всё равно вот когда даже ты говоришь про эту ситуацию у меня-то отдел продаж И я очень хорошо это понимаю да историю связанную вот с раздачей то есть бизнес тут тоже может опять же видеть это только на знаешь вот типа как они с верхней стороны а есть вещи которые нужно учитывает давай возьмём увольнение То есть даже при том что ты говоришь увольнение человека всё равно заставит всех кого он вёл передать То есть ты после ну ну всякое бывает вот человек уволился вот сегодня вплоть до того что человек умер Хотя конечно мы не хотим такого и тебе придётся поменять его То есть это кстати не означает что у тебя их много но у тебя возможность смены она присутствуют не безусловно я просто тому что всё равно очень многие вещи конечно то есть типа Даже если мы даём эту модель человеку который не является опытным разработчиком Она ему поможет Ну это наверно Естественно да Надо понимать что типа никакая те не заменит просто вот э вот сеньор скажем так да Ну ты типа ЕС у тебя опыта нет ВС равно где-нибудь жаш потому что иначе бы все эти пользовались и все бы делали Классно я готов с тобой поспорить причём следующим способом я это называю жречество знаешь вот есть жрецы одна из их задач это вообще говоря охрана храма Да соответственно недопуска проц к алтарю к сакральным штукам и я вот такую штуку пря люблю вот прям в последнее время особенно и один из моих таких движущих механизмов в данном случае это вот это вот демистификация происходящего и поэтому когда я слышу слово сеньор Я с одной стороны конечно с ним Ну я понимаю О чём-то да Там типа ты Ну давай так просто вот опыт Да Поня опытный дяденька и студент - это разные вещи а вот мы взглянув на документ где мы увидим его сеньор человека который его делал вот вопрос мой к тебе вот в буковка Выделите жёлтым Где вы видите что был сеньор най человек И вот именно как раз не в документе именно в том что как бы твой опыт всегда же тебе подсказывает что какие были недо заданы вопросы просто потому что Ну не знаю если ты никогда не обжигался там вот там я вот ребёнка Воспитываю Да ну там уверенности в том что он всё понимает потому что не сталкивался с какими-то ситуациями там на каждом шагу Пап Не беспокойся это невозможно па друз па не беспокойся мне никогда не напишут сску там с родом никогда не сталкивался с мошенничеством да же просто вопрос как бы житейского опыта и так далее Здесь тоже самое то есть если ты базу не ронял ни разу или там с бэками никогда Ну ты же понимаешь о чём я говорю можно просто не доза нужный вопрос потому что он у тебя в голове не возникнет из-за отсутствия опыта Ну да то есть выписать ВС выпишут вот ког в самом начале говори связаные с УВО или е чем-то человек который вот только-только в это входит у него в голове даже такой модели может не быть что А точно люди же увольняются я за это про это забыл вот я такие вещи имею в виду ну да И когда мы обнаружим что нам нужно обрабатывать увольнение мы его достаточно быстро в процессе как бы разработки Ну как быстро условно говоря обнаружим мы пойдём сделаем новый атрибут Например я не статус сотрудника наме работает ли он у нас всё ещё там и тому подобное то есть проблема состоит в том что если ты типа вот сир в твоих терминах ты как бы пытаешься предугадать что-то впереди то как бы там не предугадывать к тебе придут кто-нибудь и скажет надо всё переделывать потому что бизнес со скоростью Как там со скоростью мысли соответственно да типа и тому подобное и ты всё равно как бы предугадывать пойдёшь и будешь что-нибудь менять то есть в каком-то смысле твоя ситуация мало отличается от ситуации испуганного новичка который просто об просто не подумал ты о чём-то другом не подумал Ну не волнуйся типа хотел привести пример тоже вот у меня есть курсы школа колледж есть такая интересная штука Ты знаешь неявная вещь связанная например с обучением за рубежом и в России короче в Штатах у тебя ситуация следующая Ну я думаю в Европе также Да у тебя как бы первично знаешь что Вот есть же все такие А ну ну что там понятно да все же были студентами Да помнят У тебя есть там преподаватели классы предметы всё такое но прикол в том что у тебя вся эта система строится знаешь вокруг чего она у тебя строится то есть там очень важно что первично потому что очень сильно на систему влияет У тебя есть курс под который набираются люди То есть у тебя люди могут абсолютно разные у тебя на один и тот же курс могут ходить первый курс второй пятый третий конкретно Вася Петя Лена и вот они все ходят и получается что у тебя вся система построена курс к которому что-то привязано соответственно система оценивания аналитика и всё остальное И ты знаешь что всякие вот эти мски популярные они все вот именно такие И например когда мы начали их использовать а МСХ во-первых мало а во-вторых их там три штуки Да они там типа мировые мы прямо сразу же упёрлись в эту проблему потому что мы кстати причём Мы понимали что мы упрётся просто не думали Ну ладно прокатит не прокатила потому что у нас система в России на уровне законодательства вокруг группы строится То есть у тебя есть группа к которой всё привязано и вот такие вещи Они очень прикольные потому что они такие знаешь тонкие скажем так они не на поверхности лежат Я просто привожу Как пример вот одних из кейсов Где Вот продумывание таких вещей при проектировании таких вещей это очень интересно и сложно и самое главное ты такой думаешь блин тут вот одновременно на двух стульях не усидишь то есть если ты проектирует подобную систему тебе придётся выбрать либо это либо это Хотя в основе вроде те же самые курсы в основе те же самые группы Они что же там есть И всё остальное А всё меняется просто кардинально это очень интересный пример своей жизненность и мы сейчас обсудили вот эти три анкера атрибуты линки да и у нас был в начале вот этот документ как бы неформальный написанный человеческим языком вернёмся к вопросу о том как нам понять закончили ли мы нашу базу данных вот этих там хоть этого Джима хоть твоего твоей Le системы А что мы делаем мы берём этот самый текст и проходим по нему с хайлайтером и про каждый как бы ну такой вот фрагмент тзки нашей неформальной Да мы отвечаем сами себе на вопрос где мы это храним и мы такие Да вот типа у нас есть там тренеры и клиенты клиенты могут заказывать слоты у тренеров Ага значит по клиентов мы упомянули тренеров мы упомянули слоты Ну в смысле упомянули вот в это в этих табличках как бы да ти Он есть в списке анкеров условно говоря да типа скилы упомянули в списке анкеров есть Линк между тренером и скиллом и тому подобное и в какой-то момент мы возможно доберёмся до какого-то место где мы такие о Мы про это забыли сказать специи Да соответственно типа у нас это нигде нет в нашей логической схеме нашей базы данных это механизм того как понять всё ли ты сделал если у тебя после пере прочтения вот этого исходного документа ты не видишь никаких пропусков значит скорее всего Ты можешь наверное начинать типа программировать Ну там надо ещё физическую часть раскидать Мы тоже сейчас поговорим соответственно Вот и очень интересный кейс То есть вы хотели по группам А вам давали все по людям Да короче и там и там студенты и там и там Универы Да и получается что Российская система и Я так подозреваю что там рядом вокруг в странах примерно похожи У тебя всё это обучение Советское скажем так у тебя есть группа которая как бы все вместе вот типа она привязана к курсам преподавателям То есть у тебя расписание формируется привязано к твоей группе это очень важно потому что это является ядром всей этой системы американская европейская система устроена совершенно по-другому У тебя есть курс вокруг которого формируются люди которые его посещают то есть формальная группа может и есть для того чтобы там какие-то административные вопросы решать Но у тебя нет такого что у группы есть некое расписание потому что во-первых каждый человек выбирает себе набор предметов который на который он ходит и Ну ты представляешь LMS заточенная под одну систему вообще не работает для людей работающих в другой системе Хотя вроде бы в целом-то одно и то же так-то глобально если посмотреть Это довольно прикольно блин Проблема в том что слово курс оно многозначное в России оно означает одно а ты Я так понимаю используешь Ну то что как бы Корс называется да как как бы тож там физика сди предмет дадада да то что у нас то что в России называется предмет Вот смотри мне кажется что если бы ты попытался провести это упражнение то есть вот записать то как тебе надо своих учеников организовывать как в базе данных ничто же не говорит о том на Ну в смысле совершенно необязательно чтобы вас данных прямо программировали с нуля тебе ничто не мешает взять существующую как бы какую-то там МС да типа цску ecce типа и составить свои требования а потом ответить ровно на этот вопрос Где хранится каждая из вот этих вещей и тогда ты смог бы понять типа что Ну вот какой-то такой связи который или там ну связи скорее всего у тебя типа нету нигде потому что вообще всё по-другому устроено и тогда ты понял бы что да у тебя не помещается Ну наверное можно на прессе сделать сделать ecce Да как бы я уверен просто Ну в смысле я име вду на чистом вордпрессе Да как бы ну если прям поставить задачу такую себе ну там плагины есть Слушай кстати не Повери это не спортивно не Кирил Слушай ты что скажи за програм не на чистом Вот Но я уверен что можно как бы вот из палок и верёвок да как бы сделать что-то похожее на магазин на вордпрессе Да вот а вот что-то наверное сделать уже будет прям совсем сложно и вот мне кажется что вот с помощью такого упражнения ты сможешь как раз и ответить на этот вопрос Подходит ли моя база данных для моей бизнес-задачи и для простых вещей Ну понятно что этот на прессе будет понятно совсем элементарный и очень быстро сломается при попытках его развивать Да соответственно типа вот Но мало ли Может ты правда хочешь я не знаю как может у тебя Ты хочешь продавать две вещи типа знаешь какая наверно интересная мыс вот отсюда скажем для людей которые действительно чуть меньше опыта таки Мне кажется я бы удивился тому что вроде бы у тебя предметная область та же самая но исключительно из-за особенностей законодательства или бизнес требований у тебя структура получившаяся может быть повёрнута настолько то есть типа два Ну знаешь как особенно са каким сервисы Да у тебя там есть дропбокс и ещё какое-нибудь файловое хранилище Ты зайдёшь внутрь у тебя наве там кардинально просто разные вещи которые очень сильно специфичны по куче признаков Хотя вроде бы типа сервисы делают одно и тоже при что нет как бы универсального способа нет типа вот предметная область Значит так разложили не так Не сработает что поедем дальше значит с нашим Джимом Давай давай очень интересные вопросы Прям вообще я буду переслушиваю
горя главы про то что я говорю Вот во-первых типа слово ти Я не использую при этом со словом атрибут я не могу его не использовать У меня нет более хорошего сло но тоже естественно пере это пере overed давай так одит да соответственно Вот вот мы сейчас про слово курс значит нашли слово Слот вот я там в такой в какой-то момент я совершил типа я так знаешь как в замм для ясности на самом деле Если ты посмотришь внимательно на эту задачу Вот у тебя есть тренер он говорит я буду работать у вас там не знаю В первую половину дня во вторник вторник четверг суббота да то есть мы знаем что каждую неделю у этого тренера есть три слота типа потому что он так хочет работать а Другой тренер хочет работать в понедельник и вторник вечером Да но эти слоты они их много Ну в смысле они новые на каждую неделю свой набор и же будет конкретно вот тренер значит Слот Тренера такого-то на 8 ноября 10 утра вот Слот тренера того же 8 ноября 12 дня 14 дня дальше значит у него закончились его слоты и мы создаём Слоты на следующий день там ну на следующую неделю вторник там какого там 11 ноября и так далее да вот таким образом у есть на самом де разных слота начинается Ну не то что начинается А блин я тоже я не люблю я сам как бы не люблю такое а потом естественно автоматом использую для драматизма соответственно такого типа потому что мне-то как раз хочется чтобы это не ад начинался а просто такой Ну да у нас есть два слота вот ну вида слотов мы их записали типа у них разное количест Ну разное как бы их количество принципиально вот что ещ У нас есть по неоднозначности слов а да слово табличка потому что я говорю Вот логическая модель у тебя изложена в виде табличек В смысле вот ну которые вот на бумаге рисуются Да там со столбиками да типа и ты в них Как быки такие как бы вписывает анкеры атрибуты линки А ты провёл Вот это упражнение где ты проходишь по тексту и выделяешь те ну как быте места кото
е написал записываешь и так до тех пор пока у тебя всё не готово Теперь тебе надо сделать таблички Ну базе данных Да как бы физически в этом месте во-первых возникает вопрос А тебе ли надо их сделать потому что может быть программисты их будут делать или вот ну там администратор бадан потому что в это мест
ч то вот эта спецификация отвечает Ну соответствует твоему бизнесу твоей задаче твоему твоему проекту Да и ты можешь э уверенно его отправлять в разработку ты как бы вот вот вот книжка моя которую я пишу она поделена на две на две Ну фактически на две половины логическая модель и физическая модель и Я просто понял что вот если ты являешься а как бы бизнес-аналитиком и ты не хочешь заниматься программированием например то ты просто тупо можешь прочитать первую половину книжки как бы и на это натурально остановиться у тебя уже будет прямо хороший результат ты будешь давать программистам хорошие а постановки типа как бы аккуратно изложено что нужно хранить где они будут это хранить то ли в реляционного ДБ то ли в Я не знаю там Динамо ДБ где всё совсем по-другому принято делать соответственно Да и тому подобное это уже Вопрос программистов как они там будут это раскидывать по своим там табличкам Jon представления это всё как бы уже Вопрос отдельный Для тебя будет Вот Но мы сейчас подъезжаем к моменту собственно физической реализации То есть у нас есть вот это вот эти логическая модель нам надо из неё сделать таблички ты вот упомянул слово риски хорошие Что произошло мы довольно много рисков уже пофиксили мы подтвердили вот этими своими вопросами и парами предложений что мы говорим дело Ну хотя бы хотя бы как бы если читать да что всё действительно так у тренера много скилов Скил преподаются многими тренерами Да вот и исправление этих рисков на стадии логического моделирования Исправил докумен
ь на самом деле пото что они написаны на нормальном языке человеческом ты можешь их отдать клиенту на утверждение Да если у тебя ситуация когда у тебя требуется утверждение постановки задач потому что вот часто когда люди начинают прям таблички фигачит с самого начала то у тебя Понятно возникает два источника рисков одновременно СПУ в один Е не разобрался в твоём примере что первичная группа или курс соответственно да А ты уже пошёл фигачит таблички Да как бы типа с мыслями про нормальные формы про индексы оптимизацию там типа как ты кри делать будешь и и тому подобное бы вопрос и конечно у тебя Ну это просто тупо ну два два источника рисков А вот так их можно разъединить и чуть-чуть поправить один а потом отдельно заняться значит физиче как бы дальше как мы собственно делаем У нас есть несколько стратегий дизайна таблиц Извините очень простая на самом деле вещь самая распространённая которую вот в принципе если ты читаешь как будешь читать учебники по Цион по моделированию типа и тому подобное то самая простая схема - это одна таблица
этого акера это колонка в этой таблице условно говоря линки если это 1 на то он идт в таблицу того анкера который с стороны соответственно А если на то Ты создаёшь отдельную табличку она называется там много разных как бы названий в которой две колонки АШК
одного с вижу Смысл в том что ты говоришь но он скорее на уровне ближе к тому что такое знаешь попытка типа дело даже не в самом процессе моделирования а именно Дело в том что ты как бы как будто вот основная всё-таки цель - это не просто смоделировать сделать а сделать в первую очередь систему которая позволит это обсудить с в первую очередь с бизнесом это просто некий по сути язык для того чтобы объяснять то же самое с бизнесом И если в принципе ты сам понимаешь то в принципе ты мог бы и на табличках сразу делать Особенно если это твоя тема в которой ты сечёшь да вот да да да конечно так это же вот в метафоре велосипеди с колёсиками соответственно Ну конечно да тебе сначала нужны колёсики а потом они тебе не нужны и ты в принципе если ты я не знаю вот ты прям делаешь свой прям стартап да Такой типа Ну конечно ты скорее всего вот Ну в смысле вот прям ты да человек твоего уровня Да но ты не будешь никаких там особо табличек делать типа В смысле вот этих вот как бы ты будешь сидеть фигачит там потому что у тебя всё равно будет столько разных проблем что это будет последня из и ты уверен что ты Ну поправишь ну типа ну ты знаешь как это всё делать Ну в крайнем случае Ну положишь сервер там не знаю на полчаса типа ну что делать как бы жизнь такая но а если у тебя как только у тебя ситуация становится более стабильной что ли Ну более какой-то зрелой я бы сказал а как только тебе становится нужным как бы это обсуждать это с другими людьми согласовывать рассказывать им как это будет да там типа и тому подобное то есть вот я тоже иногда думал как бы знаешь вот все эти вот выписывать все эти таблички знаешь эти вопросики задавать типа такой но ведь твой бизнес вырос и ты начинаешь нанимать людей и ты такой чуваки типа вот ваш вот значит база данных а у меня кстати есть её описание вот в этом вот виде и вы прямо можете Ну на большую часть своих вопросов как бы получить получить ответ сейчас я здесь даже важно тоже это всё-таки не про переход прям из такого супер стартапа в оформление а вот я именно если у тебя например команда которая в рамках большой корпорации занимается каким-то там не знаю подсистемой какой-нибудь не знаю там учёт этих страхователь контрактов Да соответственно типа ты нанимаете века типа и ты ему говоришь у нас в команде ведётся Вот такая вот значит система вот прочитай значит текущее состояние и когда будешь создавать Ну новые таблички реализовывать новую функциональность то частью of является то что ты должен добавить новые строчки вот в этот чтобы приходящий за тобой люди продолжали оставаться в той же ситуации что они знают где находить ответы на свои вопросы вот то есть да это в каком-то смысле вся эта история она не для одиноких Волков но в то же время она как мне кажется подошла бы человеку в ситуации вот я кое-как и это я пишу систему учта для Джима но при этом Я вообще не понимаю что это я не знаю что я делаю Да соно вот здесь Ты можешь как бы типа вот те табличка Ну шаблон типа вот сюда вот списываешь здесь вопросик здесь два предложени эти предложени если значит ты на правильном пути спокойно Есть как будто рядом с тобой сидит такой Челове и за плечо соответственно ти это знаешь даже как мысленный эксперимент полезно Просто если у тебя в голове скажем какие-то модели есть который можно хоть как-то валидировать Ну Можешь быстренько прикинуть так пробежаться Даже если ты этого не делаешь Кстати сейчас я ещё два момента хотел первое у меня каждый раз когда что-то говоришь Я понимаю что например поддержку того же документа или какую-то автоматизацию можно с и сделать в современным мире Да поговорил а потом попросил его ну-ка из нашего разговора вытащи все эти связи и модели Если мы с тобой просто обсуждали Ну это такое чисто упрощение скажем таких моделей либо кстати такую модель можно заваливать Да я вот уверен может закинуть спросить возможные проблемы или например как делают Ну в таких же областях что можно учесть Ну это так просто как бы мысли на тему того что можно ещё этим поиграться будет в В каком ча gpt а второй Ты знаешь этот штуку Air Table есть же кстати орный аналог Я даже его немножко использую их много есть
тоже вариант пойти прям на тыкать И самое главное там прямо же можно нажать типа сделать публичную страничку и ты по сути свою базу ещё как наружу выдаёшь и можно не только на словах А вот тыкайте пожалуйста проверяйте как работает А кто-то кстати скорее всего для вот стартапа в том же букинге в качалке они скажут о а нам вообще этого достаточно код писать не надо Всем спасибо расходимся Да код писать не надо но табличку писать надо это кстати хорошее замечание про то осознал что zer C не означает Zero И вообще говоря дизайн того же самого и дизайн того же самого тейла да То есть даже если мы с тобой решаем типа сделать эту систему найб опять же вопрос А как типа какие там ну там же таблички какие-то надо создавать типа А какие и вот ответ на это вопрос по-прежнему у нас про мки отвечу значит тоже Я недавно написал в рассылку А у меня был пост про э то что лэм может извлечь из базы данных вот В каком смысле Ну то есть понятно Да проблема естественно то чего хотят все сделать сейчас абсолютно это у нас есть база данных Мы хотим получать из неё информацию словами Мы хотим чтобы я набрал в окошке чатбот Подготовь отчёт о продажах по поквартально за последний год и мне натурально показывался отчёт о продажах поквартально за за весь год вот вопрос как это сделать как объяснить пке где где что в базе данных тут кстати такой интересный момент что в каком-то смысле я же с этого начал ровно практически такого же Примера в самом начале нашего разговора когда я говорю что приходит Новый человек или ты приходишь те гостам чтото а выходите в каком смыс оди ситу вы видите тоже самое Вы оба может прочитать схему и ты можешь прочитать схему и что-то может распарсить типа какой-то и понять что означают вот эти вот все эти названия полей такие зна крипти как бы очень характерные соответственно вот и мне как раз кажется что есть нес
устроена база данных это во-первых фиговые имена во-вторых всякие там на другом языке с аббревиатурами с сокращениями как все это любят делать соответственно и тому подобное А ещё есть такая проблема как когда у тебя Мета дата хранится в данных То бишь вот если у тебя есть табличка пользователей и у неё есть поля имя дата рождения иги то всё прекрас МКА у тебя прямо ответит прямо охренительно нарисуй гистограмму распределения возрастов наших пользователей я прямо уверен что вообще никакой проблемы не будет вот А вот если у тебя есть например такая Такой метод проектирования физической таблицы как attribute Да не безызвестный когда у тебя есть три колонки айдини ти дишни атрибута и значение атрибута и внутри одной такой таблички может храниться произвольное количество атрибутов Да одновременно и нигде не написано Ну с точки зрения Лен если на схему смотреть что там вообще бывает Ты должен пойти куда-то ещё и узнать что означают эти айдини этих атрибутов Припять такая
ти Поздравляю Значит где-то они там все перечисленные соответственно ты мне флешбеки открыл этой моделью мы её по-русски яв называли всегда Я кстати причём не помню то ли я это до анва делал то ли прямо в самом Анде по-моему до я это делал это конечно Кошмар с такой штукой работать Почему я имею с точки зрения выборок Ну то есть у тебя просто слой геморроя появляется адовый Конечно давай так Я знаю ты не любишь Омки А я люблю когда Омка за меня думает О это кстати это кстати отличный тезис про РМ Да я понимаю о чём ты это правда Смотри у меня ряд целый было ответов тебе начиная Вот ты так говоришь как будто это что-то плохое соответственно вот а вообще ну я говорил что в принципе весь этот подход он принципиально ничего не требует от тебя Вот какая у тебя есть база данных знаешь какое полное принятие происходит то есть вот берте вашу базу данных Кто бы там что бы под каки обстоятельств и технических ограничений и скорости Я не знаю организационных и тому подобное подевали Всё мы разберём по анкером атрибутам линком Не волнуйтесь соответственно список шников через запятую в текстовом поле в Арис книжке про это там SQL КБК есть такая типа олевская вот в ней прямо про это 10 страниц написано Ну натурально как превратить это в нормальную Ну в смысле превратить не в смысле Фактори А в смысле как Селект сделать нормаль чтобы он был ты по сути сейчас да материализованные путь хранения деревьев в базе Я кстати самое смешное что как раз я познакомился с ним на телемаркетер каталог Именно переводя его его переводя именно на эту систему Да кстати я знаешь что сейчас понял На самом деле Т ещ один классный тезис знаешь таким боком прошёл потому что есть же вот эта установка на тему того что современная системы в какой-то момент искусственный интеллект нас всех поза ет ты как бы не явно отвечаешь на вопрос что при том уровне проектирования эволюции баз данных и решения которые приходится применять то есть Может быть систему с нуля написать как бы как чёрный ящик Да это немножко может и не в тему но просто ты ответил по сути на этот вопрос Но если у тебя есть система особенно она большая и она Вот такая у тебя может быть Сколь угодно умный искусственный интеллект Он просто нет Поня происходит при любом раскладе потому что ту нет информации Вот только по этой причине то есть из доступной меты из легко доступной меты невозможно понять Мета в данном случае это просто название таблиц и колонок не всегда можно понять что в них хранится натурально вот я уж молчу про ситуа
с налогом или Без налога это очень интересный вопрос в некоторых системах на который необходимо знать ответ прямо знаешь а то будет очень неприятно
соответственно возвращаюсь к физической части самая распространённая стратегия дизайна таблиц - это таблица накер и табли на атрибут в рамках обычных
я думаю где-то есть штук например есть такая вариация у тебя вот есть табличка и в ней атрибуты в виде колон поехали начиная с определённого момента она остатся слишком Широкая про Это причём С
какого есть разные Знаешь это как это вот в вестернах Кто первый моргнёт Да соответственно типа А я тебя как раз спросить хотел да потому что я такой А сколько для тебя потому что я вот уверен кто-то скажет 20 кто-то скажет 150 и это будут люди работали с разными системами в своей жизни да да и я ну когда там думаю Ну про то как вот ну знаю условно говоря образовательный материал делать по этому поводу Да я как иногда такой типа надо людей напугать и сказать что бывает 500 соответственно а потом такой Господи Да кто же мне поверит то типа что-то скажет Слушай гори чувак Ну не изобретали Какие 500 через неделю после того как я этом думал я натурально нахожу там какой-то кейс где человек говорит Я пришёл на новую работу тут происходит полное безумие в частности Я сейчас работаю с таблицей в которой типа там 542 поля соответственно типа я такой о сохраню значит в свой список кейсов соответственно и буду всём говорить что типа вот так вот бывает вот я скорее к тому что Какой у тебя скажем так Тебе же по разным причинам может захотеть э создать новую создать Ну то что называется Сай Table соседние таблички в которых хранится какой-то свой набор типа атрибутов соответственно да Вот потому что иногда у тебя Ну самая чисто Техническая как бы самая распространённая причина это что у тебя начинается с определённого момента когда ты попытаешься сделать Альтер таблицы у тебя оно зависнет на неопределённый срок потому что у тебя напри это таблица там не знаю там 100 Гб И чтобы её перезаписать тебе надо натурально там я не знаю минут на 15 например перестать принимать вообще запросы Что бывает невозможно соответственно вот и это ещё хорошо Если вы 15 может быть больше вот Или ты не знаешь даже потому что это невозможно Ну как бы протестировать пока не стартует вот а значит это второй метод Ну как бы такой вариант проектирования табличек потом есть вот уже упоминавшиеся анкерное моделирование Где ответ очень простой на Каждый элемент своя табличка поздравляем соответственно вот потом есть жены где у тебя внутри одного поляк одной колонки может находиться произвольное количество атрибутов И на самом деле ещё и линки потому что J поддерживает массив а значит ты в этот массив можешь запихать там например те же самые тренеры да типа скилы тренера Мы обычно мы бы их зафиксировали в виде двух колоно обычного Линк таблицы А мы можем например в табличке тренеров хранить нку в которой хранится список скилов в видере в каком-нибудь постгрес мы вполне нормально сможем рить эту
с таких нормальных даже как бы без без без без особых Я не знаю как это сказать извращений Значит плюс естественно есть всякие хакерские варианты типа когда уже совсем там люди от разных какой-то либо От безысходности либо от каких-то Ну всегда есть какие-то кейсы ты как бы всё понимаешь как надо правильно но жизнь очень сложная штука и приходится делать сложно и соответственно но при этом Ну как бы внутри условно говоря если это проходит то ты можешь сказать о отлично можно там я не знаю сделать нормально рить потом Поэтому будет сложно аналитикам будет Поэтому сложно работать но иначе бы этого просто не было так вот это что касается реляционный набор дизайн стратегий для других подходов предположим что мы пишем эту систему в монд тогда у нас вообще всё меняется у нас просто есть вот Вот collections это называется Да соответственно типа тамошние которые как бы вместо таблиц там и мы туда Просто вот придумываем новый ключ и начинаем в этот ключ писать Да потому что у нас нет схемы как таковой соответственно Да что конечно же не так потому что схема как таковая у нас есть потому что всё равно как бы ну мы знаем что мы пишем в ключ с определённым именем и мы можем там не знаю написать в ключ с каким-нибудь другим именем Но тогда просто всё что этих данных нету типа потому что как бы поэтому как бы как как и в ситуации с шуткой про то что Север L это что типа любая технология в которой сказано что что-то лес на самом деле означает что это там есть да соответственно вот со всеми ски малес решениями ситуация точно такая же схема есть просто не знаю может быть не нужно альтра делать соответственно То есть твой процесс администрирования чуть-чуть упрощается вот потом есть отдельный большой подход для а Динамо ДБ А с Динамо ДБ ситуаци следующая значит что смешная хочу сказать чтобы как бы очертить некоторый если послушать Вот про Динамо ДБ есть тоже такой некоторый там что-то типа я прочитал значит книжку там ну самую главную книжку про Динамо db у меня взорвался мозг соответственно типа потом я значит неделю месяц лежал в лежал на берегу э на пляже и ни о чём не думал вернулся обратно значит снова прочитал эту книжку и у меня мозг взорвался второй раз но поменьше значит с третьего раза я понял Как проектировать таблиц в Динамо ДБ там смешно там если ты послушаешь лекции Рика Хуна А который был в своё время он собственно говоря был по-моему этим изобретателем Динамо ДБ на самом деле хаха он говорит что вам надо забыть про ваши ционные привычки что когда одна энтити в одной таблице То есть вы так можете сделать технически но у вас оно не будет
масштабируемой образом тормозить Ну если у вас достаточно большой сервис там другой подход к дизайну там несколько одновременно как бы таблиц смешиваются в одну там Я не готов об этом Как бы говорить сейчас но первое что говорит значит дорогой Рик Что вам надо
потому прежде чем придумывать м вот это вот делать операцию с такого вот такого когда ты такой комок создаёшь соответственно вот понять собственно говоря в это комок создаёшь вот этого те действительно нужна логическая модель и во всех своих лекциях это аккуратно обходится моде какую логическую модель как она выглядит потому что ну как бы все понимают у всех в голове создаётся логическая модель мы с тобой вот уже обсуждали Типа если ты достаточно опытен то у тебя уже как бы всё Ты всё Ну примерно всё понимаешь мой ответ состоит в том что эта логическая модель - это вот то что мы сейчас обсуждали Вот это минимальная модель из анкеров атрибутов и линков потом уже в ней ты говоришь что вот это идёт в такую-то таблицу мдб и у тебя может быть несколько анкеров идти в одну таблицу и тому подобное соответственно здесь мы не можем здесь конечно же в рамках нам нас начинает как бы подходить время типа к финалу мы не можем никаких внятных особо обсудить проектирование На физическом уровне соответственно Вот Но его можно расписать вот ча вот я в Ниж стараюсь расписать сколько-то потому что там тоже время-то идёт и подходы новые возникают типа да то есть ну как бы э хочется всё-таки както Ну там скорее знаешь не программирование для mysql версии 8.0 Да как бы а дизайн баз данных навыки которые вам пригодятся через 5 лет 10-15 когда я не знаю что будет вообще типа соответственно когда там у меня знаешь есть в этом плане э Следующий вопрос вот когда мы говорим про проектирование физических таблиц У тебя вот эта модель а помнишь мы в какой-то момент очертили есть модель а сверху У тебя же там всякие вещи могут появляться типа авторизация ещё что-то вот накладываться историчность данных не только историчность но банальные даже вот активность То есть если ты по дефолту что-то делаешь как правило вывести например активность Да невозможно Ну например это близко Да к истории изменений И это всё надо сверху отдельно
делает А потом выясняется что по кету ты не можешь увидеть все изменения которые делар побери меня тут перелопатила
Ну в смысле прям может и не смысле доделать иризация
сся ниль я не хотел этого говорить но ты вынудил меня просто передо мной лежит бумажка ИС чёрная ручкой в которой черновик поста про то как дизайни то что называется hist attribute соответственно То бишь историю изменений какого-то атрибута исходя из Вот ну как вот этого подхода Вот извини я
одно дело почему я говорю что в случае с таск менеджментом это будет сложнее потому что у тебя история как раз-таки про историю нени одного атрибута а про любые изменения начиная от того на кого его поставили в какой статус перевели и так далее Ну я имею виду задача резко сложнее становится потому что у тебя как бы Ну я имею в виду что у тебя по сути появляется история типа А как это спроектировать Особенно для людей которые никогда этого не делали потому что у тебя нету Просто прямой связи сущность понимаешь да с таском потому что у тебя изме Может быть как атрибут как изменение связи и тогда получается ты как будто бы в тексте всё это должен писать Я имею просто это интересная тоже история связа с тем что что делать непосредственно Я хочу развеять тот туман который звучит в твоих словах В смысле я имею в виду не прямо сейчас а вообще вот в принципе вот этим подходом потому что с моей точки зрения это не сложность если мы сделали и полною зали прони во предположим а потом к нам приходят Я не знаю аудиторы или там внезапно первый клиент корпоративный которому это нужно как это типа имы таки то на мой взгляд это не пробел сложная история ты идёшь и по каждому элементу данных по каждому атрибуту и по каждому Линку добав историчность задача по каждому атрибуту независимая друг от друга Вот это кстати важный принцип важный принцип ми моделинга кстати крайне важный каждый атрибут независим друг от друга Вот и в этом в в не следовании этому принципу Мне кажется прямо много проблем когда люди как бы знаешь например вот такие типа ну здесь у нас такая финансовая информация хранится и у всех такой финансовая информация но надо же фонариком посветить и понять что эта финансовая информация - это ну та точно такие же наборы атрибутов линков и тому подобного как бы да их там может быть я не знаю там 200 но их там нуну вот тако Значит у тебя такая компания Значит надо нанять Я не знаю там 50 программистов и ну типать 50 программистов и каждому поручить по четыре атрибута А как иначе собственно говоря то есть вот если просто мы возьмём зна любой простой такой говорить будет ВОМ Да как бы который мы все помним прекрасно значит из старых времён вот Ну что Ну слушай ну сколько там ну я не знаю Ну может 15 может 20 Да может их там я не знаю 50 топс но всё равно Ну ты по по каждому из вот этих три пся элементов данных ты добавляешь историчность соответственно и всё у тебя работает ну то есть придётся сделать 50 мерч квестов Да примерно или 35 мерч квестов которые включают историче каж элемента прид каждо протестировать в результате у тебя получается трекер который полностью делает историчность всех этих самых элементах Вот это очень интересно сейчас дискуссия происходит для меня уходы в такой типа а потом приходит историчность соответственно Ну да как бы я как раз хочу чтобы люди возможно понимали Ну как-то были я не знаю как сказать были готовы к этому чтобы они чтобы не было вот такого ощущения как будто где-то есть какой-то такой туман в котором смотри у тебя безусловно у каждого как бы программиста у каждого участника проекта есть части системы которые ему релевантны Да там типа ну вот интересно непосредственно ими занимается там как-то я не знаю сталкивался А есть элементы которые ему ну типа вообще всё равно да то есть условно говоря У тебя есть не знаю там банк и в банке есть вот это вот финансовая часть Да где у тебя там счета транзакции проводки там всё такое А есть например у всякого банка маркетинговая система Да такая отдельная такая как бы такая штука которая там не знаю рассылки рассылает там куда-нибудь постит в какие-то соцсети следит за аналитикой сайта там типа и тому подобное и если ты программист работающий в маркетинговом отделе то конечно Ну ты как ты знаешь ты как-то так типа будешь пример представлять себе что типа ну там где-то какието транзакции есть Ну это же из учебника да и как банк работает типа да учебник по ционного моделированию что-то там такое есть вот и обратное тоже верно то есть чуваки из финансов они такие ну там сидят эти маркетом что-то как-то у них какие-то там посещение страниц клики на кнопки а эксперименты всё такое что-то как-то Я я не
вдаваясь Часть системы которая тебе не релевантна но Я категорически против того чтобы чтобы возникало Вот это ощущение что А тут такой туман из которого видимо какие-то могут значит выйти эти Ну я не знаю кто монстры Да Silent Hill Такой типа нет никакого тумана типа надо просто посмотреть расписать и это даже не требует как мне кажется быть каким-то сеньором который не боится типа да что там бояться-то Господи поешь мне легко говорить но мне кажется важным говорить знаешь Обычно когда мы какие-то моменты вообще я обсуждаю в подкасте то Ну так пока получается да так или иначе у меня есть какое-то там мнение или какое-то знание по практически по тем вопросам которые мы обсуждаем но конкретно Динамо db не поверишь это наверное вот типа вообще для меня пятно белое Кроме того что я его видел может быть даже когда доку читал мне просто нечего сказать в плане того что там происходит но исходя из того что ты говоришь я понял что это какая-то кардинально другой подход к организации данных да там Мои познания в нём очень специфичны то есть попросту говоря я никогда никаких реальных этих самых не делал но там просто Если я правильно понимаю сумарин так что у тебя как бы внутри твоей вот этой вот таблицы которая может хранить много разных элементов одновременно ты одновременно устраиваешь шардинг так чтобы у тебя разные запросы расходились по разным физическим местам этой таблицы по что Поня что у тебя таблица может быть размером в петабайт и разбросана по там с каким-то там внутри авса серверам и ты должен как бы типа так сделать чтобы всё писалось равномерно соответственно А потом когда ты значит селекти тебе надо сделать соответственно тоже так чтобы ну как можно больше одновременно серверов принимали участие в этом селекте то есть вот это мо Какое ти понимание есть про это ну главная книжка про динам ДБ соответственно вот Может быть я её когда-нибудь почитаю но да это абсолютно не тема для Сего разговора Но важно конечно сказать что оно укладывается в Ну как бы скажем так хенд подходом Да соответственно То есть это не не какая-то такая знаешь типа ну вы там со своими
реляционное ничего вот вам сказали типа сделайте начните с создания логической модели ха-ха А у нас есть логическая модель для вас соответственно Слушай Наверное я в эту модель То есть в принципе Понятно Я единственное знаешь добавил не то чтобы добавил Вот вот эти вот Корнер кейсы которые не очевидные всё же то есть нужно как бы прилагать некие дополнительные усилия когда вот просто вот типа я сел и смоделировал недостаточно вот кейс конкретно твой Ты любишь этот пример Более того я я имею в виду календари вот всё что касается бронирования пото что у тебя и пример в книге и более того когда я на работу устраивался ты мне тестовое задание именно такое дал да Календа и там именно в этом-то и прикол что когда человек подходит к повторяющимся событиям Ну если ты просто в лоб начнёшь Вот это делать Это конечно классно но можно наломать дров опять же при переходе на физический уровень потому что вдруг мы выясняем что существует модель А что-то там по-моему Да я уже не помню В общем как-то я е там изучал на гитхабе есть либо короче Смысл в том что повторяющиеся события Это не просто как бы реляционной разложил у тебя существует специальный язык описания повторяющихся событий и как бы модель используемая эту штуку она она немножко отличается То есть ты не можешь просто нет Ты можешь это сделать но скорее всего правильно понимаешь решение получится херовая Ну знаешь как некоторые Я просто видел примеры когда люди такие О давай предзаполненные дату Да и они такие Давай инсертов табличку сделаем и ты понимаешь к чему это приводит Ну то есть пользоваться этим невозможно и тут появляется вот всё-таки нюанс что модель очень сильно завязаны именно на вот некую специфику описания таких событий которые резко меняет вот физическое устройство всей этой модели Слушай значит Смотри во-первых у меня есть ощущение что ты за мной следишь соответственно Вот и Прим не ты просто всю жизнь меня сопровождает во Возможно это так и есть потому что у меня есть здоровенный пост Ну статья на 99.000 слов посвященная вы будете смеяться реализацию реализации и системы типа Google календаря вот ну по вот этой методичке через создание логической модели а потом создание физической где довольно много вот функциональности календаря
в частности вся это было моим сознательным как бы решением все фичи по периодичности гло там воспроизведены ну я может коне что-то пропустил но я думаю что я не пропустил Ну типа вот Но конечно же эта система она Я думаю что мы с тобой ещё вдвоём сможем там друг другу прислать совестно в общем как бы но не больше типа потому что Ну конечно понятно что там решать вопросы физической сбили при увеличении количества пользователей до глох это будет большая задача да сложная типа и там естественно есть вопрос предзаполненные
мой как бы пока что вот этот самый текст опубликованный на эту тему реально много людей говорили что ти прям многое поняли про про проектирование баз данных соответственно вообще в принципе вот понимаешь я вот что сказал что вот я сейчас как бы ну это пошутил Что типа да на двоих сработает А дальше Нет ну понятно что он сработает на больше Да я думаю что он там на может быть на тысячу на пару тысяч человек Он сработает Но в каком-то смысле Да У тебя же есть ведь развитие твоей системы оно бывает и логическое и физическое То есть когда у тебя а одно дело когда у тебя меняется бизнес Да и ты там начинаешь Я не знаю продавать новые вещи делать какие-то новые ну вот там увольнение сотрудников там за какие-то кейсы кейсы кейсы это одно а другое дело когда у тебя при неизменном неизменной модели тупо растёт трафик соответственно и тогда может оказаться что у тебя там не знаю твой стартап работает я не знаю на масле а потом в какой-то момент Ты понимаешь что надо куда-то мигрировать причём даже не обязательно может быть на другую систему но тебе надо например какие-то таблички переди зайни потому что они не выдерживают лоуд соответственно Вот и В каком-то смысле можно сказать что если представите какую-то гипотетической ситуацию что вот вы сделали стартап по производству Google календаря Да а самого Google календаря не возникает и вот к нам приходят Новые люди появляются новые пользователи А мы при этом фичами не занимаемся потому что мы придерживаемся такого подхода что типа у нас идеальный продукт и пользователям о прямо идеально нравится и Нам надо просто миллиард человек заполучить соответственно но мы просто будем по мере прихода у этих самых людей периодически заниматься каким-то дизайном физической модели Ну физической как структуры типа мигрировать такую другую систему может быть реорганизовать таблички может быть потом там уедем в Динамо ДБ например да В конце концов или не знаю в бите Да соответственно Вот но логическая модель у нас останется и
работает концептуально на уровне мы по-прежнему сможем Вот ты сказал хорошее слово Корнер кейс оно у меня к нему тоже есть некий отдельный зуб Мне кажется что вредное слово е есть ещ более вот это вот я просто у
[музыка] меня кейс что вы типа ну если твой бизнес этого требует Ну обработай это ну что как вот у меня есть такой пример знаешь типа сейчас вот Люди иногда такое ощущение как будто они смотрят на количество тех кого затронул Этот кейс Да есть другой взгляд на это что ты смотришь на какую группу людей это сейчас я объясню это очень просто пользователи Да вот у нас есть сайт какой-то Да там типа социальная сеть например в нём есть пользователи и некоторые этих пользователей имеют некие Ну админские права ну ти какие-то ограниченны знаю модерировать юзеров там типа неважно совестно И на таких у нас миллион пользователей и там пять админов Да И вот внимание вопрос вот это вот этот админский флажок это Корнер кейс или как бы нет да то есть я к тому что то что что-то нужно не всем но тем кому нужно оно нужно поне каже реализовывать понятно что ты можешь при этом естественно это зависит от того как у тебя бизнес устроен Ты можешь сказать сорян люди которым все 50 человек которым нужна эта фича Идите к конкурентам мы или страдай тихо мы не будем увеличивать сложность нашей системы соответственно А может быть мы скажем не мы Я не знаю например там обязаны обрабатывать людей с определёнными Ну как бы оной ситуации типа да соответственно ти вот ну потому что вот знаешь вот у тебя Вот например вот кстати тебя этот кейс который Ты же говорил что делать если типа менеджер и он там а уволился б умер это на самом деле очень интересный вопрос потому что например у тебя Ну как типа это же два разных кейса Ты должен как бы за ними два разных бизнес-процесса ты вдруг понимаешь что у тебя типа Твой Тренер не придёт соответственно типа Почему Потому что ты его уволил Или потому что он просто не прит это кстати в Фейсбуке знае тоже в кайто мент когда Ну определённую границу это прошло они стали внедрять вот эту функциональность связанную с профилями людей которые ушли именно И это прям стало для них в какой-то момент большой задачей Да она превратилась из особой в большую сно кстати очень хороший пример пока мы с тобой разговаривали я просто всё-таки загуглил называется R Rules есть такая библиотека на JS Я кстати не знаю это название библиотеки или название этой концепции наверное название концепции скорее Да вот эти Вот это рере пра коро Да там есть определённый язык как упаковать любое правило в в строчку и потом хранить и собственно на базе неё что-то делать Ну у тебя же если мы говорим конкретно про этот пример Я просто ну я полгода писал этот текст соответственно и много думал об этом У тебя он мне не пригодилось Вообще вот эта вся эта история с вот с этими рузами там и синтаксис в рфц какой-то там специфический там и тому подобное А ну как бы он ничем не помогает тебя задача У тебя какая типа у тебя пользователь открывает экран на котором неделя и тебе надо на эту неделю показать какие у него там ивенты есть вот собственно всё То есть как тебе эти синтаксис этих рузов в этом поможет ты всё равно как-то типа ну ты не будешь парсить эти Руза Да в сле Да соответственно чтобы показать какие какие у тебя на этой неделе ивенты Ну мне всё равно казалось я так знаешь вот такой сходу дилетантский взгляд потому что у меня сейчас в голове Нет знаешь загруженной модели Я об этом сильно не думал да но я понимаю что например хранить физически всё невозможно потому что это бесконечно То есть получается что у человека просто есть некая правила которые он записывает у него где-то есть набор этих правил А и дальше соответственно когда ты неделю выводишь он у тебя под эту неделю извлекает все правила и каждая прогоняет для этой даты То есть скорее всего какой-то трансформатор есть который тебе это уже раскладывает в список конкретных слотов и ты это как бы накладываешь на календарь О смотри сейчас ответ Значит [музыка] м помимо того что вот Ну вот да ты там действительно вот в том в том подходе который я излагаю мы различаем две вещи Смотри я говорю например у нас с тобой ближайшие 3 месяца Будет еженедельный Синг по проекту Да и Я создаю этот ивент
в 19:00 соответственно Ну это не нормализованное что это написано именно в виде какого-то упакованного потому что там же почему нормализ нормализ Да не просто интересно оно реально може нормализовать все эти вещи прям полностью Да по смотри но то есть в терминах анкеров Да как бы вот анкеры можно посчитать то есть сколько у нас вот этих самых ивентов один но этот ивент он как бы периодический сейчас как Но точно также как в ситуации со слотами но у нас одновременно с этим есть 10 Ну 3 месяца Это примерно 10 недель Да соответственно у нас есть 10 конкретных слотов которые приходятся на конкретные числа 1 января 8 января пго и так далее до этого самого да то есть мы одновременно с тем как мы значит зарегистрировали что у нас с тобой одно повторяющееся раз в неделю событие Мы создали 10
кое сло для потому что мы с тобой можем за эти 3 месяца может случиться мы можем где-то перенести на час назад где-то Мы можем решить что пропустить одно Да соответственно то есть нам нуж какая-то место где мы будем записывать оверрайд по каждому из вот этих
де либо вообще убрать в конкретный день либо фактически на его базе создаётся другой Потому что ты его сдвига но при этом тебе в исходном ивенте надо исключить его оттуда нене исходный ивент Да это это сейчас короче это прямо это отдельная большая тема короче 9000 слов я говорю то есть исходный вот тот который шаблон скажем так ивента по что на же есть шаблон А есть сами ивенты которые реальные Даша не меняется на его основе создаётся вот эти 10 начальных соответственно а потом Но сейчас там надо кодировать много то есть Вот например смотри если у нас значит мы назначили на ближайшие 3 месяца а потом через 2 месяца поняли что проект закрываем и мы удаляем исходный шаблон но мы не можем удалить те ивенты которые у нас с тобой уже состоялись потому что мы Ну мы должны Глядя на наши предыдущие недели видеть там что мы с тобой встречались там в это время да соответственно типа А но следующие ивенты оставшиеся там два или три Я не знаю мы можем удалить чтобы они нам Ну потому что оних типа больше не будет соответственно тут конечно же возникает вопрос типа что понятно что это не всегда Ну в смысле это не всегда мо может сделать вот так напрямую я так сказал как-то знаешь такой типа ну вот мы создаём периодический ивент а потом просто создаём 10 настоящих ивентов А что если я просто я не знаю вот я добавляю там не знаю три раза в неделю чистить лотки Да как бы бесконечно соответственно Я же не могу пойти и до Я не знаю сколько на 100 лет вперёд просто создать мне ивент типа Каждый понедельник среду пятницу чистить лоток Да соответственно Хотя с другой стороны Почему нет может могу Ты же можешь как ну подсчитывать Да ты не знаю там заполняешь период не знаю на пару лет это не так много я на самом деле Т кстати тоже такая проблема когда людям Такой типа ну это же не знаю кажется как будто много данных ну в СС просто место на диске требуется почита го зна на одного пользователя зна несколько МЕГА МЕГА даже гиба не будет в коем случае вот но естественно есть ещё ну типа там истории ти рождени Да как бы в какой момент уже Типа если я прота вперёд на 100 лет Google скажет Слушай ну типа
хорош ито скажем прямо уже не пользоваться Да это вопрос Да он должен ну его надо как-то решать отдельно но с точки зрения проектирования БД у тебя всё равно есть шаблонный Слот и есть как бы актуальный Слот Вот это кстати очень общий патерн мы его уже собственно видели пару раз он очень часто встречается при тех же самых при любых букинга То есть если ты будешь как бы Например попытаешься подумать о том как реализовать систему например покупки кинобилеты У тебя есть зал У тебя есть сеанс в сеансы в каждом зале там не знаю в 17:00 и этот сеанс повторяется каждый Я не знаю день например типа и насколько ты будешь вперёд вот этих слотов создавать чтобы на них можно было купить билеты да типа потому что ты же хочешь Слушай ну На физическом уровне я прям практически уверен что там какой-нибудь копи Right реализован что по дефолту да Так что Ну это всё оптимизация по Да да да сри на да Ну я имею в виду что на моделирование это не влияет То есть это уже но это интересно это интересное решение то есть вообще вот реализовать такую систему кому-нибудь дать хорошая проверка для программиста на то ну как бы насколько он реально соображает и насколько он готов к этому потому что это Вроде вот даже если вот эту вот маленькую блок взять Она резко усложняет вообще всё То есть ты не можешь просто сесть такой Ну у меня есть юзер У меня есть билеты там связал абсолютно очень классный кейс Очень классный мне нравится для использования Лёш что у нас подошло с тобой время к концу мы с тобой скажем о том что у тебя вот есть эта книжка я вижу что ты ещё пока её не выпустил Ждём когда она у тебя окончательно выйдет вот ту штуку с календарём Я тоже людям покажу они посмотрят подумают и большое тебе спасибо что ты поделился этой своей моделькой было бы классно если бы у тебя было знаешь какой-то типа инфографика или такой знаешь такой гй общий вход Когда можно так оценить с высоты птичьего полёта Да смысловую часть потому что сейчас как бы как минимум вот из той штуки про календарь этого не видно и тебе нужно грубо говоря много прочитать для того чтобы понять вот эти смыслы это ну такой в прямом эфире бизнес Линч Мы работаем над этим да Что добавить да и это было бы проще как бы описывать и показывать типа О'кей вот классический подход вот такой подход вот примеры вот кейсы Где бы это использовалось короче вот этого было бы то есть это видно можно вытащить из нашего разговора Но этого не Нет пока в таком отдельном виде Да да есть много разного материала как бы в нём есть много разных взглядов на всю эту историю с разных точек зрения для разных аудиторий моментов Ну как бы фаз проекта что ли Я не знаю деятельности и тому подобное Да ну как бы мы работаем над Приходите в в Twitter поговорим Спасибо тебе большое спасибо за приглашение А было очень интересно поговорить я буду это переслушиваю
прямо полезны для презентации ладно я тогда что стесняться буду ждать что когда ты выпустишь книжку у тебя там в начале будет абзац где ты там даёшь благодарности и я повлиял на содержимое этой книги Ну если это конечно по-настоящему произойдёт вот и не забудьте подписаться на подкаст в ютуберу ВКонтакте а также на мой канал организованное программирование в телеграме где я регулярно рассказываю про эффективную разработку