Схема для хранения «двоичных» значений, таких как Male / Female, в базе данных - PullRequest
1 голос
/ 28 апреля 2010

Введение

Я пытаюсь решить, как лучше настроить схему базы данных для модели (Rails). У меня есть модель, связанная с деньгами, которая показывает, является ли стоимость доходом (положительная денежная стоимость) или расходом (отрицательная денежная стоимость).

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


Вопрос:

Как бы вы хранили эти значения и почему?

  • Есть один столбец, скажем Income, и хранить 1, если это доход, 0 если это расход, null, если нет известны.
  • имеет две колонки, Income и Expense, установив их значения на 1 или 0 как подходящее.
  • Что-то еще?

Я полагаю, что вопрос похож на сохранение пола человека в базе данных (игнорируя инопланетян / трансгендеров / и т.д.), отсюда и мой заголовок.


Мои мысли пока

  • Поиск может быть проще с одним столбцом, но есть риск принять 0 (false, расход) за null (неизвестно).
  • Поддерживать наличие отдельных столбцов может быть сложнее (что произойдет, если в обоих столбцах будет 1?

Может быть, дело не в этом, а в том, чтобы идти дальше, и было бы здорово поднять какие-либо проблемы / мысли, прежде чем я зайду слишком далеко, и мне придется изменить свою кодовую базу, потому что я упустил что-то, что должно было было очевидно!

Спасибо, Philip

Ответы [ 3 ]

4 голосов
/ 28 апреля 2010

Как бы вы сохранили эти значения и почему?

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

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

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

Ваши "мысли пока" являются признаком уже возникающих проблем.

1 / «Наличие отдельных столбцов может быть более сложным для обслуживания (что произойдет, если мы получим 1 в обоих столбцах?» - ну, этого не должно быть. Предполагается, что данные внутренне согласованы с моделью данных Вам лучше всего не допустить этого с помощью триггера вставки / обновления или, скажем, одного столбца, который не позволил этому произойти: -)

2 / "Поиск может быть проще с одним столбцом, но есть риск принять 0 (false, расход) за ноль (неизвестно)." - ошибка невозможна, если знак хранится с величиной значения. И сама идея не знать, является ли статья расходом или доходом, отвратительна для бухгалтеров. Это знание существует при создании транзакции, но оно не является туманным до тех пор, пока не произойдет какой-либо момент после транзакции.

0 голосов
/ 28 апреля 2010

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

Тем не менее, я не думаю, что это хороший способ сделать эту систему.

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

0 голосов
/ 28 апреля 2010

Иногда я использую персонажа. Например, в моей базе данных есть столбец gender, в котором хранится m или f.

И я обычно выбираю один столбец.

...