Как я мог спроектировать этот сценарий базы данных? - PullRequest
1 голос
/ 11 июля 2010

Я пытаюсь создать схему «Задача» в моей базе данных.Одно поле «заблокировано», которое представляет другую задачу, которая блокирует текущую задачу.

Я новичок в SQL Server и базах данных в целом.Как правильно создать таблицу?Кажется, единственными допустимыми параметрами являются числа или текст.

Должен ли я просто сохранить идентификационный номер другой "Задачи" в поле "заблокировано" или есть лучший способ?

Ответы [ 2 ]

6 голосов
/ 11 июля 2010

Я предполагаю:

  • у вас есть схема с именем "Задачи" в базе данных в SQL Server
  • у вас есть таблица (скажем, AllTasks), в которой хранится информация о задаче
  • вы хотели бы иметь поле с именем blockby, которое указывает, какая существующая задача блокирует текущую задачу

Вот мое предложение столбцов и пример того, как будут выглядеть данные:

TaskID   TaskName    TaskDescription .....   TaskBlockedBy
------   --------    ---------------         -------------
1        Eat         Eat food                <NULL>
2        Drink       Drink, um, water        <NULL>
3        Sleep       Ah, peace!              <NULL>
4        Wake Up     Crap                    3

Задача пробуждения в строке 4 заблокирована задачей ожидания в строке 3.

Поля таблицы будут иметь тип данных:

TaskID int (identity/autonumber)
TaskName nvarchar(50) not null
TaskDescription nvarchar(200) not null
TaskBlockedBy int

Если ожидается несколько существующихЗадачи, блокирующие задачу, разбейте таблицу на 2 таблицы: AllTasks и BlockedTasks.Таблица AllTasks больше не будет иметь поля TaskBlockedBy, а BlockedTasks и его данные будут выглядеть следующим образом:

BlockID  TaskID  BlockedBy
-------  ------- ----------
1        4       3
2        4       2

Это указывает на то, что задача Wake Up была заблокирована сном и что пользователь выпил перед сном.

НТН

3 голосов
/ 11 июля 2010

Если может быть несколько задач блокирования, связанных с одной задачей, вам нужно ввести другую таблицу, названную, например, «BlockingTasks», которая имеет идентификатор задачи и идентификатор задачи, которая ее блокирует.Не делайте это как CVS, так как это трудно делать запросы.

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