Проектирование БД: объект домена - это фиксированный столбец, фиксированная таблица строк, как создать для него таблицу БД? - PullRequest
0 голосов
/ 02 февраля 2011

проектируя мое текущее приложение, я столкнулся с проблемой: пользователь предоставил следующее требование:

Для каждого предприятия (скажем, есть таблица предприятия с ключом enterprise_id в качестве ключа) существует фиксированный набор данных, структурированный более или менее так:

             | Income | Declared | Expenses | Normalized | Whatever | etc
-------------+--------+----------+----------+------------+----------+-...
Short term   |
Medium term  |
Long term    |
Unspecified  |
Unknown      |

Ключевым моментом является то, что (концептуально) столбцы фиксированы, а строки фиксированы. И под фиксированным, я имею в виду, что это написано в моей стране! Так что это не изменится в краткосрочной перспективе.

Я сомневаюсь: каждый экземпляр «пользовательской» таблицы (с ее фиксированными M столбцами и N строками) для меня выглядит как строка БД (есть соответствие 1: 1 с enterprise_id, все данные будут сохранены / извлекается как один блок каждый раз и т. д.). С другой стороны, это много столбцов (MxN может быть сотней в моем реальном приложении), и, честно говоря, смотреть на них некрасиво, так что меня это беспокоит.

Итак, я должен создать таблицу для этих пользовательских данных со столбцами (MxN) (плюс одна для внешнего ключа enterprise_id) или я должен пойти по пути создания двух таблиц, одна с возможными строками "пользователя" («краткосрочный» и т. д.), а другой - только со столбцами («доход» и т. д.), каждая из которых в данном случае является строкой (enterprise_id, возможных_rows_id, доход, объявленный_инком и др.).

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 02 февраля 2011

Предполагая, что все значения являются некоторой валютой, я сначала подумал, что вам, вероятно, понадобится таблица, подобная этой:

term          category    term_category_value
--            --          --
Short term    Income      <some currency amount>
Short term    Declared    <some currency amount>
...
Short term    Whatever    <some currency amount>
Middle term   Income      <some currency amount>
Middle term   Declared    <some currency amount>
...    

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

0 голосов
/ 03 февраля 2011

Если столбцы 1 :: 1 с Enterprise, они должны быть в Enterprise.Но в какой-то момент вы столкнетесь с максимальной длиной строки.

Поэтому используйте вторую таблицу со столбцами MxN плюс EnterpriseId в качестве PK и FK.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...