2015-07-27 2 views
0

Я не уверен, что то, что я пытаюсь сделать, просто неверно/невозможно, или если есть более простой способ, и я пропускаю эту точку.SQL - Сохранение значений, обладающих динамическими свойствами и ограничениями

Я использую SQL Server 2012

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

Например, Я бы хотел, чтобы одна таблица представляла различные компании, другая - для хранения «файлов», созданных для каждой компании - это используется для хранения исторической информации, другого перечисления различных производственных отделов (этапов производства) цифры (KGs, Units и т. д.) и один список фактического захвата добычи по этим цифрам за каждый месяц. Существуют также таблицы, позволяющие показать, какие производственные отделы могут использовать, какие производственные показатели, а также какая компания имеет производственные отделы.

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

Эти цифры фиксируются на ежемесячной основе ТОЛЬКО, поэтому у меня есть таблица, описывающая все месяцы года.

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

Вот ссылка на графическое представление макетов таблиц: http://tinypic.com/r/30a51mx/8 ..


Мой конечный результат для автоматического заполнения/обновить таблицу с вновь добавленных фигур, как пользователь вводит этот раздел (путем прохождения через FileID) и разрешить пользователю редактировать это с помощью datagridview (или по крайней мере выбрать значение, которое нужно отредактировать из datagridview)

Затем мне нужно будет написать отчеты о том, что будет необходимо опираться на эту информацию.


Любая помощь или предложения были бы весьма признательны.

Благодаря

+0

Рассмотрите, действительно ли хотите пойти по пути EAV. Является ли характер данных настолько переменным, что вы должны это делать? Это действительно не так. Нет ничего плохого в таблице, в которой есть несколько малонаселенных столбцов. –

+0

Спасибо за это, я пересмотрю свой подход. У меня примерно около 10-15 этапов для обслуживания, около 20 разных цифр в трех компаниях. Вы считаете, что создание таблицы на каждом этапе возможно или создание 1 таблицы с полями с нулевым значением в этом сценарии лучше, чем EAV? – BeepBop

ответ

0

Для эффективного проектирования БД, очень важно понять, два основных требования:

  1. Если дизайн DB сделать имея в виду простоту использования с точки зрения применения просмотра или с эффективной точки хранения.

Эта точка является большим решенном, имея в виду следующие факторы:

  • Сколько данных мы будем хранить, так что мы должны иметь некоторое представление о стоимости факторинга избыточности хранения , Хорошая нормализованная БД уменьшает избыточность. Ваша БД нормализована очень хорошо, но это действительно необходимо.Как правило, стоимость хранения в наше время очень мала, поэтому, если мы можем думать о дизайне, который немного избыточен, все должно быть в порядке. Если, конечно, вы не планируете использовать стандартную версию SQL-сервера, у которой есть свое ограничение по размеру БД.
  • Является ли поиск и обновление данных медленным/быстрым? Чем больше нормализованных БД больше числа, ожидаются JOINS. В вашем случае, если вы хотите вернуть значения для нескольких свойств, скажем n, в одном результате, тогда вам нужно будет сделать n соединениями в таблице ProductionProperty, что существенно снизит производительность запросов и, следовательно, приведет к медленному пользовательскому опыту , Поэтому, если ваш пользовательский интерфейс не является очень требовательным, и ваши пользователи могут жить с небольшим отставанием, выполните нормализованный дизайн БД.
  • ORM несоответствие - Поскольку модель реляционной базы данных и объектная модель (при условии, что язык программирования соответствует концепции ООП), как правило, несовместимы, и они будут сильно работать в нормализованном сценарии, подобном этому; вам нужно потратить больше времени на кодирование или устранение неполадок, которые могут потребовать от вас извиваться от боли при внесении изменений в любую из этих моделей. Я предлагаю вам использовать хорошую структуру ORM для борьбы с этим и лучше знать сценарии несоответствия ORM.

    1. У вас есть отдельная отчетная БД или таблицы отчетности? В основном это означает, что ваша БД представляет собой базу данных OLTP или базу данных отчетов? Если эта БД будет работать в течение длительного времени лицами, отправляющими данные, изо дня в день, нормализованная форма должна быть подходящей, учитывая, что точка № 1 удовлетворена. Если, однако, отчет является основной потребностью, то предпочтительной является де-нормализованная форма (это означает, что вам не нужно столько отдельных таблиц).

PS: Основные данные должны храниться в таблице его own.I можно сказать определенно месяцев мастер данных и так UoM, если вы не планируете делать CRUD о мерах UoM тоже. Также обратите внимание, что это вряд ли имеет значение для ведения месяца в отдельной таблице, особенно когда одна и та же бизнес-логика/ограничения могут применяться в столбцах SQL.

+0

Я буду использовать стандартную версию, поэтому размер будет фактором в будущем, но я согласен со всеми вашими точками. Из этого я думаю, что это может вызвать у меня больше горя, чем это стоит, и что я должен переосмыслить свой подход. – BeepBop

Смежные вопросы