Ответы пользователя по тегу Базы данных
  • Технологии для разработки клиент-серверной информационная системы на Windows XP?

    с обязательной возможностью запуска клиента на Windows XP

    Имхо, единственное требование, ограничивающее возможность выбора, т.к. все остальное - тривиально.

    На XP ставится .NET FW 4.0, поэтому берите C#+WPF и разрабатывайте. Можно и WinForms в принципе, если это приложение а-ля картотека.
    Т.к. на сервер - современная ОС, то и стек на сервере можете выбирать, какой нравится (это если клиент нужен тонкий).

    Система формирования и печати отчетов

    Библиотек под дотнет достаточно. Если задача прям совсем нестандартная, вас выручит XML и XSL-FO.
    Ответ написан
    Комментировать
  • Оправдано ли использование строкового первичного ключа?

    Оправдано ли будет сделать первичным ключем гос.номер, т.е. , допустим, поле nchar(6)?

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

    Для СУБД небольшая строка фиксированной длины (напр, 12 байт) - все равно что большое число, особой разницы в общем-то нет. А вот строки переменной длины как правило хранятся иначе, в отдельной области, а в самой записи ставится указатель. Все это, разумеется, удорожает запросы.
    Ответ написан
    5 комментариев
  • Какие существуют архитектуры взаимодействия с базой данных?

    А вы по какому признаку хотите классифицировать? Я вот могу назвать такую архитектуру клиент-серверной, а еще многослойной.
    Какие альтернативы? Ну, во-первых сам WCF может быть очень разный, и SOAP, и REST. Во-вторых, некоторые клиенты (например, административного характера) могут цепляться напрямую к базе (к примеру, они имеют доступ к серверу по VPN), и тогда веб-сервиса между БД и клиентом нет.
    Также, приложение может работать не сразу со веб-сервисом/БД, а к примеру складировать данные в локальную базу (какой-нибудь SQLite), а потом её синхронизировать с основной БД - также через сервис или напрямую (зависит от доверия к клиентскому приложению) - это сложнее с точки зрения наладки всего процесса, но иногда просто необходимо, если связь с центральным сервером БД не гарантирована (иногда приложения на мобильных устройствах должны работать и вне большого города и толстого 4G канала).

    WCF-служба может пользоваться ORM или программист может заранее составить все SQL-запросы.
    WCF-служба может хоститься и на IIS, если это удобно. Хотя, если она выполняет в БД фоновые операции, то вполне правильно и логично хостить её в Виндовом сервисе.

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

    Вас что конкретно интересует? Нужно хотя бы говорить о клиенте или сервисе отдельно, т.к. это сами по себе крупные компоненты со своей архитектурой.
    Ответ написан
  • Как называются "не точности" в двух строках в информационных системах?

    Если описанное вами уже имеет место, и вам надо с этим жить, то ответ на ваш вопрос - Data integration, и, в частности, Semantic integration - у вас один из простейших вариантов семантической интеграции - когда используются разные терминологические алфавиты.

    Схожие термины:
    Ответ написан
    Комментировать
  • Какие многопользовательские субд с последовательным доступом вы знаете?

    Читать про следующее:
    1) Изоляция транзакций
    2) MVCC
    3) Snapshot isolation

    И какую-нибудь книжку по БД. Сейчас вы ничего не понимаете в работе многопользовательской БД.
    Сайт вы нашли совершенно невероятный. Задумайтесь о поисках других источников.
    Ответ написан
    Комментировать
  • Разработка десктоп клиента для БД. Чем, на чем?

    P.S. ОС у пользователей естественно windows (7,8)

    GUI - когда-то пару проектов на winform

    C#

    ну так чего думать-то. Посмотрите на WPF, на EntityFramework/NHibernate и вперед. Ну или если есть возможность и время, разбейте на веб-сервис (можно написать на чем угодно) и веб-клиент (собсно, ваше десктопное приложение).
    Ответ написан
    2 комментария
  • Как правильно спроектировать службу?

    Во-первых вам нужно ОЧЕНЬ ЧЕТКО понять принципиальную разницу между терминами "WCF service" и "windows service", т.к. общего между ними немного. Первое это про веб-сервисы, второе - это тоже что и демоны в *nix-системах. Первое это про архитектуру распределенной системы, второе это про жизненный цикл программы (как, когда и кем запускается/останавливается).

    Поэтому:
    1) если разработка под Винду, и
    "служба должна выполнять в фоне некоторые действия с бд"

    то почитайте про Windows Service - на шарпе такие пишутся относительно просто. Это не единственный способ запустить процесс, который будет крутиться и сам что-то делать в базе, но он предпочтителен.
    2) если взаимодействие с клиентом подразумевается не по самодельному протоколу, а например по HTTP, то вам срочно нужно ознакомиться с тем, что такое веб-сервисы/веб-API и какие они бывают. Если вы уже понимаете что это такое, то вам нужно выбрать способ реализации под Дотнетом.

    Подскажите, это можно сделать в рамках одной службы или нет?

    Если под службой понимается Windows-служба, то можно. Стоит ли - другой вопрос, зависит от тех действий, которые вы хотите выполнять в фоне, архитектуры БД и политики работы с ней.
    Ответ написан
    Комментировать
  • User Settings Database Design/Scheme?

    0 [вступление] )
    Я не знаю почему но мне найблоьше нравится 3 вариант, но уже надоело делать под себя. хочется сделать как у людей)

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

    Теперь по делу:
    1) вариант подходящий для случая до 5-6 настроек на юзера, и с уверенностью, что их количество расти не будет; если больше - не стоит;
    2) это EAV. Не особо вижу в нем смысле, если вам доступен пункт 3;
    3) json-колонка settings вполне себе ничего. Важным премуществом является то, что вы тогда можете хранить только переопределенные пользователем значения. А как правило, пользователи не меняют более 20% настроек, особенно если они удачно подобраны. Т.е. после создания у вас будет пустой объект json, и после каждой смены настройки в объект будет добавляться поле, если настройка еще не менялась, либо обновляться, либо удаляться, если юзер нажал "reset to defaults". В случае пункта 1 вам бы пришлось использовать NULL для пометки того, что пользователь не устанавливал эту настройку;
    4) не вижу особого смысла: файлы настроек, вероятно, будут небольшими, плюс эти файлы будут лежать у вас списком, а не иерархией, а тогда смысл использовать ФС;

    и еще 5) если проект большой и настроек и юзеров много, я бы подумал об использовании документной БД для этой цели - тогда можно будет выделить отдельный сервис для задачи хранения настроек.
    Ответ написан
  • Какие есть визуальные инструменты для создания архитектуры БД?

    Т.к. не написано про бесплатность, то классика жанра - ERwin.
    Ответ написан
    Комментировать
  • Как база данных производит подсчет строк?

    Да, как реализован COUNT()?

    Зависит от:
    а) того, что будет внутри COUNT
    б) того что будет в WHERE (и будет ли он вообще);
    в) реализации в конкртеной СУБД;

    Пример 1: если вы сделаете COUNT с WHERE по неиндексированному полю, то без сканирования таблицы не обойтись. Кроме того, если поле внутри COUNT() может быть NULL, то СУБД придется выкидывать еще и нуллы, т.к. COUNT их не учитывает.

    Пример 2: если вы сделаете COUNT по первичному ключу без каких-либо фильтров, то СУБД вероятно просто вернет вам количество строк из своих служебных структур, т.к. первичные ключи а) уникальны; б) не могут быть NULL в большинстве сегодняшних СУБД.

    Вывод: SQL это высокоуровневый декларативный язык, который перекладывает принятие алгоритмических решений на планировщик СУБД, что дает очень большой простор для оптимизаций в конкретных реализациях. Лучший рецепт - построить план КОНКРЕТНОГО запроса и увидеть, что потребуется для его выполнения.
    Ответ написан
    Комментировать
  • Идентифицирующая или неидентифицирующая связь?

    Смысл в том, что при идентифицирующей связи внешний ключ в дочерний сущности также становится частью первичного ключа. В этом и смысл фразы "зависимая сущность" - т.к. внешний ключ есть часть первичного, то сущность просто не может существовать без указания значения внешнего ключа.

    Хороший пример - сущность "элемент заказа" (OrderItem). Не может быть элемента заказа без самого заказа. Поэтому идентифицирующая связь из отношения "заказ" (Order) отлично тут подойдет. Если у заказа первичный ключ Id, то первичный ключом OrderItem будет, к примеру, такая пара: (OrderId, Number), где OrderId - внешний ключ в таблицу заказов, добавленный идентифицирующей связью, а Number - номер элемента заказа (строки в чеке, если так понятнее), позволяющий иметь несколько заказанных товаров в одном заказе.

    Неидентифицирующая связь, соответственно, НЕ добавляет колонки внешнего ключа в первичный ключ. Соответственно, значение внешнего ключа при неидентифицирующей связи может быть как NULL, так и NOT NULL.
    Ответ написан
    1 комментарий
  • E-mail вместо id плюсы и минусы?

    1) Так и не понял, вы хотите email вместо логина или вместо id. Начинаете вопрос одним, заканчиваете другим.
    2) Если вместо логина - то что вообще значит "вместо"? Не использовать логин вообще или использовать email для авторизации?
    3) Если вместо id - оно как бы в теории можно, но как бы не стоит. Вы же помните, что вам потом внешние ключи ставить в виде email-ов? И обновлять их при смене адреса пользоватаелем. Правильно, это жесть, поэтому не надо.
    4) А чего вы вообще переживаете про WHERE `email`='почта@домен' - ну авторизовали аутентифицировали человека один раз, в сессию положили его id, дальше выборки по id, в чем задача-то?
    Ответ написан
    1 комментарий
  • Какой существует инструмент прототипирования базы данных?

    Работал и советую:
    • ERWin Data Modeler - классика жанра. Штука платная (есть Community редакция с ограничением до 25 таблиц на схему) - хороший инструмент, не замороченный, минимум неожиданностей. Минус - только под Винду (возможно ошибаюсь, но линукс-версии не видел).
    • SQL Developer Data Modeler от Оракла - более навороченная штука, есть некоторые странности и переусложнения, написана на Java. Но зато бесплатная, пользоваться вполне можно. Плюс - сохраняет схему в достаточно короткие xml-файлы, организованные по папкам. Специальным суффиксом .local помечаются файлы, которые локальны для текущей машины. Вывод - очень удобно использовать с системой контроля версий.

    А вообще инструментов действительно миллион, некоторым из них уже за десяток лет. Есть и много новых, онлайновых. Вообщем, гуглите еще. На википедии вообще завались.
    Ответ написан
    Комментировать
  • Что выбрать, единую базу или по базе на каждого пользователя?

    Все зависит от того, что предполагается давать пользователю в управление. Если сервис таков, что юзер никогда-никогда не должен получать доступ к базе, то тогда можно в одном наборе таблиц. Хотя разные БД будут проще в администрировании и на порядок безопаснее (вдруг где-то забудете сделать WHERE по id магазина). Если между магазами не будет общих данных, тогда преимуществ от использования одной базы ИМХО практически нет.
    Ответ написан
    1 комментарий
  • Какой должна быть ORM?

    > И меня несколько удивило отсутствие каких-либо наработок в этой области в Rust (хотя бы начальных версий).
    1) язык в релизе несколько месяцев, чего вы хотите-то;
    2) не во всех языках ORM смотрится естественно. В C++ нормальной ORM нет до сих пор, есть некоторые библиотеки на базе Qt, но де-факто стандарта нет просто потому, что в языке недостаточно силен уровень метаданных. Но в этом нет проблемы просто потому, что на плюсах редко пишутся приложения, где нужен такой уровень;
    3) А может повсеместное использование ORM это только удел web?
    Я бы сказал что ORM это удел бизнес-приложений и языков высокого уровня (Java/.NET/Ruby). Другое дело, что веб-приложения в 99% случаев пишут на всяких asp.net и Рубях, а не на плюсах, поэтому и такая корреляция. Внутрикорпоративных десктопных приложений по прежнему достаточно, и как раз там ORM тоже любят.

    > Подскажите, на сколько высокоуровневой должна быть ORM?
    Это вам решать, ORM-ки разные бывают, кто-то где-то используют потолще, кто-то - потоньше. Лично я особого смысла в тонких не вижу для большинства задач, поэтому на мой вкус в ORM обязательно должны быть следующие вещи:
    1) martinfowler.com/eaaCatalog/identityMap.html
    2) martinfowler.com/eaaCatalog/unitOfWork.html
    3) martinfowler.com/eaaCatalog/inheritanceMappers.html

    Вообще, озакомьтесь для начала со всеми Object-Relational паттернами: martinfowler.com/eaaCatalog, а то наверняка напишете парк велосипедов.
    Ответ написан
    2 комментария
  • Как организовать структуру базы данных для динамических характеристик?

    Как добавить товар в корзину?

    - EAV (ссылку дал @muhammad_97);
    - JSON/XML в реляционной базе;
    - JSON в документной базе (CouchDB/MongoDB) (предпочтительный вариант);
    Ответ написан
  • Как правильно спроектировать базу; консистентность данных?

    > и для каждого из них есть уникальные поля
    А как этими полями будут пользоваться? Группировки/фильтры/агрегация по ним будут?
    Если будут, то тогда действительно 20 таблиц (и это нормально, т.к. тогда и кода для каждого типа пользователя у вас будет достаточно). И паттерны наследования - concrete table, single table, class table.
    Если не будут (т.е. эти поля будут читаться/писаться целиком) - может в JSON поле их?
    Ответ написан
    Комментировать
  • Плохо ли если класс самодостаточен, в плане получения каких то данных необходимых для его полноценной работы?

    Nipheris
    @Nipheris Куратор тега C#
    Зависит от того, какую ответственность вы "отдаете" в класс. Если это так называемый "value object", т.е. некий неизменяемый композит, то лучше ему в конструктор передать сразу готовые значения. Если же это самостоятельный объект с внятным жизненным циклом и определенной ответственностью - тогда конечно логично чтобы он сам брал данные из репозитория.
    Вам нужно почитать про Dependency Injection - это как раз та "середина" между двумя альтернативами, что вы предложили в виде фрагментов кода. Обращаться к глобальном объекту репозитория - это также антипаттерн. Гораздо лучший вариант - это когда объекту при создании передается (!) репозиторий в конструкторе, а объект уже САМ делает выборки необходимых данных. Это как раз и есть удачный вариант спуска от общего к частному. Плюс, вся логика сосредоточена в классе - я всегда могу добавить новую Модель (если следовать вашим примерам), которая также берет репозиторий, но вытаскивает из него уже ДРУГИЕ сведения.
    Вот стандартный туториал, в котором роль вашего "класса" выполняет ASP.NET-контроллер, и он получает репозиторий в конструкторе: www.asp.net/web-api/overview/advanced/dependency-i...

    Вообще принцип всегда такой - если есть некоторая переменная или значение, то есть N точек, из которых можно получить к ней доступ. Чем меньше этих точек - и при этом вы можете без извращений реализовать нужную вам бизнес-логику - тем лучше. И чем ближе в коде эти точки расположены друг к другу - тем лучше. Всегда удобнее работать с кодом, когда данные конкретной сущности и логика их обработки умещаются хотя бы в одном файле.
    Ответ написан
    3 комментария
  • Можно ли в таблице сущности хранить информацию о колличестве ссылающихся сущностей?

    У меня есть подозрение что такими запросами можно или убить базу или созадать коллизию при записи\выдаче


    MySQL: https://dev.mysql.com/doc/refman/5.0/en/set-transa...
    А вот с Кассандрой будет сложнее: www.datastax.com/dev/blog/row-level-isolation
    Ответ написан
    Комментировать