Как вы проектируете схему базы данных для страницы профиля пользователя - PullRequest
0 голосов
/ 26 декабря 2018

Попытка настроить страницу профиля пользователя для сайта вакансий.База данных, которую я планирую использовать, - это база данных MySQL.

Рассматривая несколько вариантов дизайна базы данных, я разработал эту схему.

Во-первых, таблицы управления пользователями

CREATE TABLE `user` (
  `user_id` int(11) NOT NULL,
  `firstname` varchar(32) NOT NULL,
  `lastname` varchar(32) NOT NULL,
  `email` varchar(96) NOT NULL,
  `mobile_number` varchar(32) NOT NULL,
  `password` varchar(40) NOT NULL,
  `salt` varchar(9) NOT NULL,
  `address_id` int(11) NOT NULL DEFAULT '0',
  `ip` varchar(40) NOT NULL,
  `status` tinyint(1) NOT NULL,
  `approved` tinyint(1) NOT NULL,
  `registration_date` datetime NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE `user_address` (
  `user_id` int(11) NOT NULL,
  `city` varchar(128) NOT NULL
  `work_city` varchar(128) NOT NULL,
  `postal_code` varchar(10) NOT NULL,
  `country_id` int(11) NOT NULL DEFAULT '0'
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE `user_description` (
  `user_id` int(11) NOT NULL,
  `description` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

а затем таблица образования и опыт работы

CREATE TABLE `education_detail` (
  `user_id` int(11) NOT NULL,
  `certificate_degree_name` varchar(255) DEFAULT NULL,
  `major` varchar(255) DEFAULT NULL,
  `institute_university_name` varchar(255) DEFAULT NULL,
  `start_date` date NOT NULL DEFAULT '0000-00-00',
  `completion_date` date NOT NULL DEFAULT '0000-00-00'
)

CREATE TABLE `experience_detail` (
  `user_id` int(11) NOT NULL,
  `is_current_job` int(2) DEFAULT NULL,
  `start_date` date NOT NULL DEFAULT '0000-00-00',
  `end_date` date NOT NULL DEFAULT '0000-00-00',
  `job_title` varchar(255) DEFAULT NULL,
  `company_name` varchar(255) DEFAULT NULL,
  `job_location_city` varchar(255) DEFAULT NULL,
  `job_location_state` varchar(255) DEFAULT NULL,
  `job_location_country` varchar(255) DEFAULT NULL,
  `job_description` varchar(255) DEFAULT NULL
)

Обратите внимание, что user_id в таблице user_address, user_description, education_detail и experience_detail является внешним ключом, ссылающимся на него впользователь таблицы.

Есть еще несколько таблиц, таких как навыки, сертификация и т. Д., К которым я планирую использовать user_id в качестве FK.

Мой вопрос, достаточно ли хорош этот дизайн базы данных?Можете ли вы предложить мне, что нужно сделать еще, чтобы сделать дизайн намного лучше?

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

1 Ответ

0 голосов
/ 27 декабря 2018

Используйте InnoDB, а не MyISAM.(Есть много вопросов и ответов, объясняющих «почему».)

NULL или пустая строка вполне подходит для пропущенного description.Есть ли у вас еще один аргумент за неприязнь к такому?(Между тем, InnoDB более эффективен в обработке необязательных больших строк.)

Каждая таблица должна иметь PRIMARY KEY;кажется, у тебя их нет.Первая таблица, вероятно, нуждается в user_id в качестве PK.Прочитайте о AUTO_INCREMENT.

Как и с description, почему address находится в отдельной таблице?

Могу ли я предложить это для названия страны / кода / идентификатора:

country_code CHAR(2) CHARACTER SET ascii

Образование - 1: многие из пользователей, поэтому user_id не может быть ПК.То же самое для рабочих мест.

...