Задать вопрос
  • Проектирование баз данных. Связи между профилями?

    @Uglik Автор вопроса
    Еще больше запутался. Так одну таблицу профилей делать или 2?

    Вариант первый:
    Пользователи:

    CREATE TABLE `users` (
      `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Номер записи',
      `username` varchar(255) NOT NULL COMMENT 'Имя пользователя',
      `email` varchar(255) NOT NULL COMMENT 'Электропочта',
      `password` varchar(255) NOT NULL COMMENT 'Пароль',
       PRIMARY KEY (`id`)
    )


    Группы пользователей:

    CREATE TABLE `groups` (
      `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Номер записи',
      `name` varchar(255) NOT NULL COMMENT 'Имя группы пользователей',
       PRIMARY KEY (`id`)
    )


    Наборы групп, в которую входит каждый пользователь

    CREATE TABLE `usergroups` (
      `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Номер записи',
      `user_id` int(11) NOT NULL COMMENT 'ID пользователя',
      `group_id` int(11) NOT NULL COMMENT 'ID группы пользователей',
       PRIMARY KEY (`id`)
    )


    И одна таблица с профилями:

    CREATE TABLE `profile` (
      `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Номер записи',
      `user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Номер записи',
      `avatar` varchar(255) NOT NULL COMMENT 'Аватарка',
      `firstname` varchar(255) NOT NULL COMMENT 'Имя пользователя',
      `lastname` varchar(255) NOT NULL COMMENT 'Фамилия пользователя',
      `about` text COMMENT 'О себе',
      `location_id` int(11) NOT NULL COMMENT 'Индификатор города',
      `haircut_id` int(11) NOT NULL COMMENT 'Индификатор стрижки',
      `price` decimal(10,2) NOT NULL COMMENT 'Индификатор стрижки',
      `contacts_id` int(11) NOT NULL COMMENT 'Индификатор контакта',
      `portfolio_id` int(11) NOT NULL COMMENT 'Индификатор портфолио',
      `reviews_id` int(11) NOT NULL COMMENT 'Индификатор отзыва',
       PRIMARY KEY (`id`)
    )


    В таком случае будет много полей пустых, но многие поля NOT NULL с индикаторами других таблиц с данными. Как в данной ситуации быть.

    Вариант второй:

    Тоже самое только 2 таблицы профилей:

    Парикмахеры

    CREATE TABLE `profile_hairdresser` (
      `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Номер записи',
      `user_id` int(11) NOT NULL COMMENT 'Номер записи',
      `avatar` varchar(255) NOT NULL COMMENT 'Аватарка',
      `firstname` varchar(255) NOT NULL COMMENT 'Имя пользователя',
      `lastname` varchar(255) NOT NULL COMMENT 'Фамилия пользователя',
      `about` text COMMENT 'О себе',
      `location_id` int(11) NOT NULL COMMENT 'Индификатор города',
      `haircut_id` int(11) NOT NULL COMMENT 'Индификатор стрижки',
      `price` decimal(10,2) NOT NULL COMMENT 'Индификатор стрижки',
      `contacts_id` int(11) NOT NULL COMMENT 'Индификатор контакта',
      `portfolio_id` int(11) NOT NULL COMMENT 'Индификатор портфолио',
      `reviews_id` int(11) NOT NULL COMMENT 'Индификатор отзыва',
       PRIMARY KEY (`id`)
    )


    Клиенты

    CREATE TABLE `profile_client` (
      `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Номер записи',
      `user_id` int(11) NOT NULL COMMENT 'Номер записи',
      `avatar` varchar(255) NOT NULL COMMENT 'Аватарка',
      `firstname` varchar(255) NOT NULL COMMENT 'Имя пользователя',
      `lastname` varchar(255) NOT NULL COMMENT 'Фамилия пользователя',
       PRIMARY KEY (`id`)
    )


    В данной ситуации я тогда не понимаю как связать профили с юзерами через связь многие ко многим. Если не сложно вышлите пример.

    Промежуточная таблица получаеться типа:

    CREATE TABLE `profile_client_hairdresser` (
      `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Номер записи',
      `user_id` int(11) NOT NULL COMMENT 'ID пользователя',
      `profile_id` int(11) NOT NULL COMMENT 'ID профиля пользователей',
       PRIMARY KEY (`id`)
    )


    НО профиля у нас 2!
    Ответ написан