Нарушаю ли я какое-либо NF-ПРАВИЛО в моей базе данных? - PullRequest
3 голосов
/ 02 июня 2011

Добрый день!

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

Моя схема базы данных выглядит следующим образом: enter image description here

ПРИМЕЧАНИЕ: я включилIDant_id в другие таблицы ... например экзамен, собеседование, тип экзамена.

Я нарушаю какое-либо правило нормализации? Если я это сделаю, что вы посоветуете улучшить мой дизайн? Спасибо

Ответы [ 5 ]

4 голосов
/ 02 июня 2011

В целом выглядит хорошо.Несколько незначительных моментов для рассмотрения:

  • Интервьюер тоже человек.Вам нужно будет использовать программную логику для предотвращения различных / неправильных написаний.
  • Самый длинный реальный адрес электронной почты, который я видел, был 62 символа.
  • На экзамене вы используете зарезервированное слово date дляимя столбца
  • (субъективно) Я бы переименовал дату-заявителя в application_at
  • Я не вижу почтовый индекс для заявителя
  • Все result столбцы VARCHAR(4).Если они используют одинаковые значения, можно ли их нормализовать?
  • Дата рождения лучше хранить, чем возраст.Вы не хотите назначать собеседование на дату рождения (или если вы жестоки по своей природе, вы действительно этого хотите :)).Возраст может быть получен из него и также всегда будет корректным.

РЕДАКТИРОВАТЬ: Учитывая, что результатом является PASS или FAIL, просто объявите поле как логическое и назовите его «пройдено».Намного быстрее.

3 голосов
/ 02 июня 2011

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

1 голос
/ 02 июня 2011

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

Таким образом, определение этого должно выглядеть примерно так:

TEST 
 TEST_ID
 TEST_TYPE_ID ref TEST_TYPE - Table that define the test type 
 TEST_REQUIRED_SCORE - The value of the score that need to be reach to pass the exam. 
 ... - Many others properties of TEST like duration, expire date, active inactive etc. 

APPLICANT_RESULTS 
 APPLICANT_ID ref APPLICANT
 TEST_ID = ref TEST
 TESTS_DATE - The day of exam 
 TEST_START - The time when the test has started 
 TEST_FINISH - The time when the test has ended 
 APPLICANT_RESULT - The applicant result of taken test. 

Такая структура болеегибкий и дает простой способ указать требования между тестами в таблице, как это

TEST_REQUIREMENTS - Table that specify the test hierarchy and limitation   
 TEST_ID ref TEST
 REQUIRED_TEST ref TEST
 ORDER - the order of exams 

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

  • Создать таблицу, в которой будет храниться определение вопроса (один вопрос можно использовать на экзамене, экране или собеседовании)
  • Таблица корзины, котораябудет хранить ответы на вопросы.
  • Создать таблицу, в которой будет храниться информация о тестовом вопросе.
  • Создать таблицу для хранения ответа на каждый вопрос, заданный заявителем.
  • Триггер, который обновит общий балл теста.
1 голос
/ 02 июня 2011

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

Я заметил, что результаты - это поле varchar 4, я предполагаю, что вы планируете поставить Pass / fail в него. Я хотел бы рассмотреть вопрос о числовой оценки. Парень, который правильно ответил на 80% вопросов, но тот, кто правильно ответил на 100%, может быть лучшим кандидатом. На самом деле для интервью у меня могут быть вопросы и таблицы результатов интервью. Затем вы можете записать оценку и любые комментарии по каждому вопросу, которые могут помочь в дальнейшем оценке многих кандидатов. Мы делали это вручную в бумажных электронных таблицах, когда мы брали интервью у нескольких сотен человек (у нас было более ста вакансий в то время, а это было намного раньше персональных компьютеров), и было очень полезно иметь возможность сравнивать ответы на вопросы. Трудно вспомнить 200 человек, с которыми вы беседовали, и кто что сказал. Позже это может помочь, когда у вас будет новое открытие, чтобы найти людей, которые были сильны в вопросах, наиболее подходящих для новой работы, которым, возможно, не дали работу во время собеседования (5 отличных кандидатов, 1 работа, например).

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

1 голос
/ 02 июня 2011

Вы, кажется, не нарушаете никаких правил нормализации с первого взгляда.Однако из вашего проекта схемы не ясно, что Applicant_id является ссылкой на таблицу соискателей.Убедитесь, что вы объявляете его как внешний ключ, который ссылается на таблицу кандидата при фактической реализации схемы.

Не для того, чтобы делать какие-либо предположения относительно ваших данных, но можно ли сохранить результат проверки в 4 символа?

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