Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Проверка структуры БД / 12 сообщений из 12, страница 1 из 1
15.09.2009, 12:31
    #36196325
maller_s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка структуры БД
Здравствуйте. У меня такая ситуация. Ходил на собеседование и меня попросили в качестве теста спроектировать структуру базы данных.
После того как я отправил свой вариант мне ответили что я не устраиваю их как специалист. Что было не так мне естественно не сказали. А знать бы хотелось. Поэтому я выложу условие и свое решение. Если кто может найдет какие ошибки, то я был бы благодарен за советы и объяснения.

УСЛОВИЕ:

Требуется: Разработать структуру данных (перечень таблиц, ключей, индексов, триггеров) для реализации системы учета рабочего времени сотрудников. Требования к системе:
• суммарная отметка выполненных сотрудником за день работ не должна превышать 10 часов;
• каждый из сотрудников работает только в одном отделе и обладает одной из категорий («Сотрудник на испытательном сроке», «Специалист», «Ведущий специалист», «Руководитель проекта» и т.п.). Состав категорий может изменяться при выделении новых организационных единиц;
• в каждом отделе есть руководитель;
• в один день сотрудник может работать по разным проектам, и по разным этапам проекта;
• должна быть возможность фиксации перечня проектов, в которых может участвовать сотрудник;
• для работ выполненных для внешних заказчиков отдельно должно указываться время выполнения таких работ.

МОЕ РЕШЕНИЕ:

----------------------------------------------------------Таблицы------------------------------------------------------------------------------------------------------

Time
TaskNo int Primary Key
Date DateTime Дата рабочего дня
EmployeeID int Идентификатор сотрудника
GrantID int Идентификатор разрешения работы по проекту
Hours Decimal(2,0) Кол-во часов
TaskDescription text Описание сделанной работы

Триггер: 1. На вставку в таблицу проверка количества часов в день. Должно быть меньше либо равно 10.
2. На проверку разрешения работы сотрудника по соответствующему проекту (в таблице GrantToStage)
Кластеризованный индекс на столбец Date.
Некластеризованный индекс на столбец EmployeeID.





Employees
EmployeeID int Идентификатор сотрудника
Name varchar(50) Имя сотрудника
PositionID int Идентификатор должности
DepartmentID int Идентификатор отдела

Position
PositionID int Идентификатор должности
PositionName varchar(50) Название должности

Department
DepartmentID int Идентификатор отдела
DepartmentName varchar(50) Название отдела
DepartmentLeaderID int Начальник отдела


ProjectStages
StageID int Идентификатор этапа
ProjectID int Идентификатор проекта
StageName varchar(50) Название этапа

Projects
ProjectID int Идентификатор проекта
ProjectName varchar(50) Название проекта
CustomerID int Идентификатор заказчика

GrantToStage
GrantID int Идентификатор разрешения работы по проекту
StageID int Идентификатор этапа
EmployeeID int Идентификатор сотрудника

Customers
CustomerID int Идентификатор заказчика
CustomerType bit Тип заказчика(внутр. или внешн.)
CustomerName varchar(50) Название заказчика


Схема БД в приложенном рисунке.

Модератор: Тема перенесена из форума "Microsoft SQL Server".
...
Рейтинг: 0 / 0
15.09.2009, 12:54
    #36196416
Naf
Naf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка структуры БД
текст не читабелен абсолютно
С уважением, Naf
...
Рейтинг: 0 / 0
15.09.2009, 12:57
    #36196430
maller_s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка структуры БД
Знаю. Просто я сначала не там эту тему создал. Ее перенесли и что то с текстом случилось. Не могу найти где отредактировать. Вот тогда заново:

Здравствуйте. У меня такая ситуация. Ходил на собеседование и меня попросили в качестве теста спроектировать структуру базы данных.
После того как я отправил свой вариант мне ответили что я не устраиваю их как специалист. Что было не так мне естественно не сказали. А знать бы хотелось. Поэтому я выложу условие и свое решение. Если кто может найдет какие ошибки, то я был бы благодарен за советы и объяснения.

УСЛОВИЕ:

Требуется: Разработать структуру данных (перечень таблиц, ключей, индексов, триггеров) для реализации системы учета рабочего времени сотрудников. Требования к системе:
• суммарная отметка выполненных сотрудником за день работ не должна превышать 10 часов;
• каждый из сотрудников работает только в одном отделе и обладает одной из категорий («Сотрудник на испытательном сроке», «Специалист», «Ведущий специалист», «Руководитель проекта» и т.п.). Состав категорий может изменяться при выделении новых организационных единиц;
• в каждом отделе есть руководитель;
• в один день сотрудник может работать по разным проектам, и по разным этапам проекта;
• должна быть возможность фиксации перечня проектов, в которых может участвовать сотрудник;
• для работ выполненных для внешних заказчиков отдельно должно указываться время выполнения таких работ.

МОЕ РЕШЕНИЕ:

----------------------------------------------------------Таблицы------------------------------------------------------------------------------------------------------

Time
TaskNo int Primary Key
Date DateTime Дата рабочего дня
EmployeeID int Идентификатор сотрудника
GrantID int Идентификатор разрешения работы по проекту
Hours Decimal(2,0) Кол-во часов
TaskDescription text Описание сделанной работы

Триггер: 1. На вставку в таблицу проверка количества часов в день. Должно быть меньше либо равно 10.
2. На проверку разрешения работы сотрудника по соответствующему проекту (в таблице GrantToStage)
Кластеризованный индекс на столбец Date.
Некластеризованный индекс на столбец EmployeeID.





Employees
EmployeeID int Идентификатор сотрудника
Name varchar(50) Имя сотрудника
PositionID int Идентификатор должности
DepartmentID int Идентификатор отдела

Position
PositionID int Идентификатор должности
PositionName varchar(50) Название должности

Department
DepartmentID int Идентификатор отдела
DepartmentName varchar(50) Название отдела
DepartmentLeader varchar(50) Начальник отдела


ProjectStages
StageID int Идентификатор этапа
ProjectID int Идентификатор проекта
StageName varchar(50) Название этапа

Projects
ProjectID int Идентификатор проекта
ProjectName varchar(50) Название проекта
CustomerID int Идентификатор заказчика

GrantToStage
GrantID int Идентификатор разрешения работы по проекту
StageID int Идентификатор этапа
EmployeeID int Идентификатор сотрудника

Customers
CustomerID int Идентификатор заказчика
CustomerType bit Тип заказчика(внутр. или внешн.)
CustomerName varchar(50) Название заказчика


Схема БД в приложенном рисунке.
...
Рейтинг: 0 / 0
15.09.2009, 14:26
    #36196737
ChA
ChA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка структуры БД
maller_sХодил на собеседование и меня попросили в качестве теста спроектировать структуру базы данных.
После того как я отправил свой вариант мне ответили что я не устраиваю их как специалист. Что было не так мне естественно не сказали. А знать бы хотелось. Поэтому я выложу условие и свое решение. Если кто может найдет какие ошибки, то я был бы благодарен за советы и объяснения.Строить гипотезы, что не понравилось "авторам" теста, дело абсолютно безнадёжное. Причины могут быть любыми и совершенно неожиданными, вплоть до не имеющих отношения к предложенному решению. В случае, если отказ связан с Вашими ошибками проектирования, то пояснять их может дорогого стоить, как по времени, так и по объему. В конце концов, это же не учебное заведение, отказали, значит "увы". Адекватность их мнения можно было бы проверить выяснением хотя бы одной из причин, по которой решение было признано ошибочным, если, конечно, оно стало причиной отказа. Так что лучше всё-таки обратиться к ним. С другой стороны, а оно Вам точно надо ? Насколько мне известно, существует такое мнение, что чем сложнее тесты, тем хуже чувствуют себя там работники. Впрочем, не возьмусь доказывать его справедливость.

Здесь же можно привести много причин, по которой решение кажется сомнительным, но нет никакой уверенности, что они совпадут с мнением "авторов". Может там вообще смотрят на схему, изображенную местным гуру, и при несовпадении предлагаемых решений с ней автоматически отказывают соискателю.
...
Рейтинг: 0 / 0
15.09.2009, 15:54
    #36197073
maller_s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка структуры БД
ChAСтроить гипотезы, что не понравилось "авторам" теста, дело абсолютно безнадёжное.

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

А так я полностью согласен с тем что Вы написали.
...
Рейтинг: 0 / 0
15.09.2009, 20:02
    #36197734
Naroto
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка структуры БД
maller_sчто возможно я сделал достаточно грубые ошибки, которые человеку, хорошо в этом разбирающемуся, бросятся в глаза.

Нет, ошибок бросившихся сразу в глаза Naroto не увидело. Выглядит вполне реализуемо тем более что не реализацию от Вас ожидали увидеть а понимание основных положений создания и применения тех или иных объектов баз данных. Naroto в результате такой схематики поинтересовалось бы о кластерных индексах и почему {Table Time} выбран столбец Date как кандидат, а не ключ TaskNo - если бы ответ был удовлетворительный - Naroto бы поставило зачёт. Naroto не увидело других табличных ключей и индексов. А какова была позиция по этому собеседованию?
...
Рейтинг: 0 / 0
16.09.2009, 04:23
    #36198037
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка структуры БД
Поле Time.GrantID неуместно. Time нужно связывать непосредственно с этапом проекта. А так получается, если сотрудник списал время на этап и

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

Таблица Position либо не нужна, либо не отвечает требованию об изменяемости состава категорий (текущий состав категорий нигде не фиксируется).
...
Рейтинг: 0 / 0
16.09.2009, 11:07
    #36198491
maller_s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка структуры БД
Naroto А какова была позиция по этому собеседованию?

Разработчик ECM систем

Участие в проектировании прикладных решений на базе ECM;
Разработка и адаптация прикладных решений с использованием инструмента разработки IS-Builder, Microsoft SQL Server, .NET (ASP.NET, ADO.NET, WWF);
Разработка прикладных решений на платформе MS Share Point;
Разработка отчетов для MS Reporting Services;
...
Рейтинг: 0 / 0
16.09.2009, 11:24
    #36198541
maller_s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка структуры БД
mcureenab А так получается, если сотрудник списал время на этап и

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

Да действительно - при такой структуре нельзя будет отменить разрешение на работу. Даже если в момент удаления прав из табл GrantToStage обнулять поля GrantID у соответствующего работника в табл Time, то невозможно будет понять по какому проекту он работал когда было разрешение(((
Интересно как тогда реализовать разрешение...
Спасибо - буду думать...
...
Рейтинг: 0 / 0
16.09.2009, 11:28
    #36198556
maller_s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка структуры БД
mcureenab, насчет таблицы Position не очень понял
...
Рейтинг: 0 / 0
16.09.2009, 12:59
    #36198904
maller_s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка структуры БД
mcureenabПоле Time.GrantID неуместно. Time нужно связывать непосредственно с этапом проекта.
Все. Я понял что Вы имели ввиду. Так действительно все получается. Спасибо!
...
Рейтинг: 0 / 0
16.09.2009, 15:48
    #36199427
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка структуры БД
maller_s,

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

Требование для меня звучит несколько невнятно, поэтому реализация Position вызывает сомнения. В частности удаление организационной единицы должно будет сопровождаться изменением записей в Employees.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Проверка структуры БД / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]