• Как канонично организовать структуру таблиц в базе данных MySQL?

    pi314
    @pi314
    Антон Дышкант: 1.
    Будет ли "правильно" (читай нормализовано), если их просто внести в таблицу department?"

    Если так сделать, то да - все равно будет "нормализовано", просто, в меньшей степени, чем если бы их вынести в отдельные таблицы. А вот правильно это будет или нет, зависит только от самих свойств. Самая общая рекомендация: если свойства имманентны (т.е. присущи всем и каждому department-у), смело пихайте их в эту таблицу - это не создаст дополнительной избыточности, но позволит избежать в запросах одного бесполезного JOIN; а те, которые специфичны (или могут быть специфичны), пихайте в отдельную. Но, опять же, как в каждом конкретном случае "правильно", зависит не только от моделируемых сущностей, но и от того, что конкретно предполагается делать с этой моделью. Например (пофантазируем): где-то в UI захочется поиметь редактируемый список всех (общих и специфических) свойств одного конкретного department-а в виде key-value, в котором будут редактироваться только значения. Тогда программисту потребуется для каждого свойства еще его признак (общее/специфичное). Для такого случая гораздо удобнее вынести и общие свойства в отдельную таблицу с таким же точно набором полей, как и в "специфичных", т.е. тогда эта общая рекомендация уже будет неверной ))
    2. "Любой учебник по SQL", по теории реляционных БД и т.д. - это хорошо, но только начало. Изучение теории позволит, грубо говоря, уверенно отвечать на вопрос, в большей или меньшей степени нормализована та или иная структура, но мало что даст в смысле ответа на вопрос "как правильно" )) По-настоящему понять все закономерности можно только спроектировав большое количество разных систем, совершив при этом все возможные ошибки и прочувствовав на собственной шкуре их последствия. (Это, разумеется, мое личное IMHO... я повидал кучу теоретиков, проектировавших офигительно нормализованные БД, приводившие в результате к полной заднице в проектах. Возможно, мне просто не везло в жизни и где-то есть правильные книжки, которые им следовало бы изучить вместо тех, которые они изучали...)
    3.а На практике есть, в принципе, два подхода к проектированию: DB first или code first. То, что Вы, видимо, пытаетесь делать, это DB first, а настоящий Дзен, как обычно, где-то посередине ))
    3.б В смысле архитектуры принято говорить об уровне абстракции доступа к данным (Data Access Layer). Это как раз и есть тот код, который распутывает/запутывает клубки связей между сущностями, чтоб программист на уровне бизнес-логики мог сосредоточится именно на ней, а не на заморачиваться на тему конкретных JOINов или диалекта SQL. Но его тоже кто-то пишет. Готового решения из коробки нет, но есть куча паттернов (от наиболее распространенных, вроде DAO, DTO и до экзотики типа QBE). Но паттерны - это просто общие рекомендации. А по сути все так или иначе сведется либо к использованию ORM, либо к собственному "велосипеду".
    4. Эту конкретную схему я набросал в Enterprise Architect и из него же сгенерировал DDL (просто был под рукой на момент написания ответа), но должен предупредить, что EA - далеко не лучший выбор для таких дел. Есть много подобных тулзов попроще, но для конкретно MySQL, сам бог велел воспользоваться MySQL Workbench.
  • Превышение объёма памяти в C#?

    pi314
    @pi314
    Kirill Rud: Если б Вы хоть намекнули, как выглядят эти ваши дофигачисла (сколько значащих цифр), и сколько есть памяти в распоряжении программы, можно бы было точно ответить на этот вопрос. А так считайте сами )) Сколько памяти занимают строки, я написал. А сколько занимают встроенные типы, есть вот тут: https://msdn.microsoft.com/en-us/library/exx3b86w.aspx

    Если достаточно uint (~10 значащих цифр), то это 4 байт, если ulong(~20 значащих цифр), то 8 байт. Если хранить количество ведущих нулей, то для этого будет достаточно 1 байт дополнительно. И, да - массивы по расходу памяти гораздо эффективнее коллекций, а скорость работы с данными в памяти гораздо выше, чем при записи в файл )) Ну, а если ulong все еще недостаточно, тогда взгляните на BigInteger и, возможно, библиотеки с большей производительностью (blog.wezeku.com/2014/06/10/high-performance-large-... В общем и целом это все будет в любом случае эффективнее, чем строки ))
  • Превышение объёма памяти в C#?

    pi314
    @pi314
    Просто для справки: строка занимает 14+length*2 (в х86) или 26+length*2 (в х64) байт. Нехилое развлечение, пытаться запихнуть это все в RAM )))))
  • Превышение объёма памяти в C#?

    pi314
    @pi314
    Думается, основной вопрос, все же: почему числа нужно колбасить строками? Даже если нужно для каждого числа сохранять количество ведущих нулей, это можно сделать отдельным числом. Возможно, тогда вообще не придется решать искусственно созданную проблему :)
  • Что такое "s" в параметрах к LIPO и NIMH аккумуляторным батареям?

    pi314
    @pi314
    S означает количество элементов, соединенных последовательно (serial), а P - параллельно (parallel). Например, 1S2P означает два элемента параллельно.

    И еще, все же, литИевых, т.к. их не льют, а делают из лития ;)
  • Отличия XML от JSON?

    pi314
    @pi314
    Забавно, что пока никто из хора отвечающих не обратил внимания на XSD/DTD/валидацию, XSLT и XPath/XQuery ))
  • Что значится под UML и что под RUP?

    pi314
    @pi314
    David Amirkhanov: UML играет такую же роль в RUP, как модель служебного автомобиля гендира в бизнесе предприятия )) UML - это просто формализованный язык моделирования каких угодно систем (их структурных и поведенческих аспектов). В RUP именно на нем предлагается документировать модели того, что RUP хочется моделировать... Однако точно так же можно бы было лепить из пластилина или "на пальцах" без ущерба для сути самой методики. Только вот методика, сама по себе, реально хреновая... затеоретизированный вымысел на тему сферической разработки в вакууме, какой ее представляли себе в 90-х, который на практике просто не работает. Видимо, для утешения тех, кто за это уже заплатил деньги, к методике прилагается сносный редактор UML... так сказать, сувенир на память ))
  • Как в C++ распределяется память?

    pi314
    @pi314
    Pantene742: Прикол в том, что нет такой инструкции процессора, как "выделить память" )) Эта строка псевдокода может означать десятки/сотни разных инструкций... Поэтому говорят не "создать", а "объявить" переменную! А что из этого конкретно выйдет, зависит от языка, его модели памяти, ОС и даже конкретного компилятора. В простейшем случае, на примере С++, если это строка "int a = 5;" в теле функции, то компилятор скорее всего просто "передвинет" указатель стека, засунув в него значение 4 (никаких абсолютных адресов ему еще неизвестно - они появятся, когда OС загрузит программу в какие-то конкретные места памяти; компилятор оперирует с относительными адресами)... а если это строка в глобальной области видимости, то он поместит значение 4 в сегмент данных и "запомнит" его адрес (опять же, относительный), который будет потом использовать в тех местах, где с этой переменной что-то делается. Соответственно, это "что-то" (непример, прибавление 4) будет выглядеть в инструкциях процессора совершенно иначе.
  • Как правильно описать архитектуру проекта?

    pi314
    @pi314
    Иван Стройкин: Рад, если ссылки оказались полезны, но я не гонюсь за славой, а написать обстоятельный ответ, чтоб был полезен еще кому-то, к сожалению, просто не было времени. Так что, пускай остается, в комментах )) Добавлю только, что ARC42 в той или иной форме используется для документирования больших проектов, разрабатываемых под кучей норм и регуляций, причем, как водопадно, так и агильно. (В моем текущем проекте это документ под тысячу страниц с тоннами UML и сквозными requirement и risk traceability). Но он хорош также и тем, что его можно сокращать до разумного минимума без потери смысла, т.к. он задает только общие рамки - какие аспекты нужно раскрыть в документе, а уже сколько и как детально написать на каждую тему, оставляет полностью на откуп архитектору.
  • List в java это связный список?

    pi314
    @pi314
    ...сорри - тостер немного корёжит форматирование. Вот так:
    Интерфейсы      Классы
    ----------      ------
                    Object
    Iterable
      Collection ->   AbstractCollection
        List       ->   AbstractList
                          AbstractSequentialList
                            LinkedList
  • List в java это связный список?

    pi314
    @pi314
    4ainik:
    Видимо, не разобрались, если утверждаете подобное ))) Интерфейс в Джаве, по сути - то же самое, что абстрактный класс в плюсах, и присутствует, как самостоятельная конструкция языка только от того, что в языке принципиально нет множественного наследования. Класс в Джаве не может наследоваться от нескольких предков... но зато может имплементировать несколько интерфейсов (которые, кстати, сами по себе, могут наследоваться). Это, в свою очередь, четче очерчивает предназначение конструкции "абстрактный класс" - модуляризация имплементации разных уровней иерархии интерфейсов. Это - всего-навсего чуть более строгая и последовательная (по сравнению с плюсами) реализация в языке того самого паттерна, о которм Вы говорите.
    Так что, если Вам удалось создать инстанс чего-то, можете быть на 256% уверены, что это был не интерфейс и не абстрактный класс... или же, это была не Джава))

    Насчет "во-вторых" и учитывая вышесказанное - взгляните на иерархию наследования интерфейсов и классов для LinkedList:

    Интерфейсы		Классы
    ----------		------
    				Object
    Iterable
    	Collection		AbstractCollection
    		List			AbstractList
    							AbstractSequentialList
    								LinkedList

    Тут показаны только интерфейсы, непосредственно "виновные" в наличии метода get(int index), хотя, суммарно, конкретный класс LinkedList имплементирует еще и Serializable, Cloneable, а также Deque и Queue, но это уже другие иерархии интерфейсов, опущенные здесь для наглядности.
  • Есть ли CSS-генератор/редактор, где, нарисовав произвольную фигуру (div в html), можно увидеть её код в css?

    pi314
    @pi314
    Константин   : А это, судя по всему - yet another one визуальный редактор CSS. Стильный-модный-молодёжный, но - увы - в контексте вопроса достаточно бесполезный, ибо автору хотелось "рисовать произвольные фигуры мышкой". Если что, значение слова "произвольные" можно найти в толковом словаре ;)
  • List в java это связный список?

    pi314
    @pi314
    4ainik:
    возникло подозрение...
    Если внимательно читать доку и понимать устройство/свойства разных структур данных, на смену подозрениям может придти уверенное понимание :) Если заглянуть вот сюда https://docs.oracle.com/javase/8/docs/technotes/gu... (Collection Implementations), без всяких сравнений становится понятно, какого быстродействия на каких операциях / наборах данных можно ожидать от той или иной имплементации. А заодно разобраться, чем отличается интерфейс от реализации.
  • List в java это связный список?

    pi314
    @pi314
    4ainik: Реализация берется не от импорта интерфейса, а от импорта имплементирующих его классов! Это может быть один из классов из JDK, или даже свой собственный (если понадобится). Вся инфа есть в JDK, а в исходник соотв. имплементации можно заглянуть прямо в любой IDE, сделав Ctrl+Click (пример для Эклипса) на интересующем классе. И незачем елозить по сомнительным статьям в интернете - начните с официальной доки. Там подробно и точно описаны все подробности реализации. Идёте в https://docs.oracle.com/javase/8/docs/api/java/uti... и далее по ссылкам из All Known Implementing Classes :)
  • Где почитать теорию по навигации внутри зданий?

    pi314
    @pi314
    А, вообще - гуглите "indoor navigation pdf", берете любую дипломную или курсовую работу по теме (их в сети тонны!) и дальше - по библиографии ))
    https://www.hdm-stuttgart.de/stage/mediafiles/1997...
    https://vsis-www.informatik.uni-hamburg.de/getDoc....
    https://www.media.mit.edu/speech/papers/2011/posit...
    ceur-ws.org/Vol-393/paper1.pdf
    etd.library.vanderbilt.edu/available/etd-03232015-...
  • Где почитать теорию по навигации внутри зданий?

    pi314
    @pi314
    А что конкретно интересует? Есть много работ на эту тему (сейчас из головы, к сожалению, ссылок не накидаю - гуглятся по indoor navigation), разной степени серьезности / маркетинговости... Только вот самОй навигации нет, т.к. массовые технологии на рынке типа WiFi или BTLE для этой задачи пригодны лишь условно, а внедрять специализированные системы слишком затратно по сравнению с возможным профитом. Так что, большинство работ на эту тему либо обещают чудеса (маркетинг), либо исследуют какой-нибудь конкретный аспект (типа разрешающей способности RSSI регистра какого-нибудь смартфона), и приходят к выводу, что, нет - с этим конкретным смартфоном, конечно, результаты убогие, но вот, если бы, да кабы... на чем и заканчиваются ))
  • Что плохого во вложенных массивах?

    pi314
    @pi314
    Если речь именно о массивах, а не об ArrayList, как в вопросе, то для них утверждение верно, т.к. в Яве нет настоящих многомерных массивов. А для ArrayList ничего плохого в такой вложенности нет, если она реально нужна. Но нужно понимать, что по производительности это никогда не сравнится с настоящими массивами ))
  • Как добавить недостающие элементы в массив?

    pi314
    @pi314
    Попробуйте переформулировать вопрос так, чтоб его суть стала понятна не только вам и кучке телепатов на этом сайте, но и непосвященному читателю... Может тогда на него можно будет ответить ))
  • Как работает данный код?

    pi314
    @pi314
    Ришат Султанов: Алгоритм простой:
    печатается то, что передали при вызове в аргументе sam,
    потом строка " ВЛАД1",
    потом то, что передали в аргументе sue,
    потом строка " ВЛАД2",
    потом то, что передали в аргументе foo,
    потом "." (точка) и конец строки (=переход на новую строку).