Дизайн базы данных: разные поля для разных типов пользователей - PullRequest
0 голосов
/ 23 ноября 2010

Я создаю приложение с использованием MySQL 5.0.77, которое содержит

a) различные типы пользователей (например, столяр, механик, ..., сантехник)
б) разные поля ввода для каждого типа пользователя, например, пользователь выбирает плотника и получает поля, относящиеся к этой профессии, где поля для каждой профессии различны

Я думаю так:

Table: users<br> user_id<br> user_name

Table: carpentry<br> user_id<br> woodwork_rating<br> metalwork_rating

Table: plumbing<br> user_id<br> central_heating_rating<br> bathroom_rating

И так далее ...

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

Мне очень нравится идея таблицы метатегов (как мы видим в Wordpress), так что запись каждого поля пользователя сохраняется, например,

Table: user_info<br> user_id<br> field<br> value

Таким образом, мы бы, например,

1 | работа по дереву | промежуточный
1 | металлообработка_рейтинг | расширенный
2 | woodowork_rating | продвинутый

Мой вопрос: как бы вы структурировали базу данных, имеющую несколько полей для нескольких пользователей, для которых каждый пользователь заполняет только одну категорию доступных полей?

Спасибо

Ответы [ 3 ]

1 голос
/ 29 января 2012

Я бы хотел положиться на последний ответ Майка.Я сталкиваюсь с этой проблемой.я создаю сеть со следующими типами

Enterprise {name, mail, adress, etc ...}
Employee {name, mail, branch, jobdescription, etc ...}
Individual {name, mail, surname, age, town, etc...}

как насчет:

Таблица пользователей

userID (autoincr)
userType
mailadress
password
...    

Таблица Типы пользователей

typeID
typeName
typeDescr

ТаблицаПредприятия

entID (autoincr)
userID
field 1
field 2
...

Таблица Сотрудник

empID (autoincr)
userID
...

Таблица Физические лица

indID (autoincr)
userID
...

это имеет смысл для вас?

1 голос
/ 23 ноября 2010

Таблица пользователей:

 UserID: Autoinc PRIMARY KEY
 (More user data columns here)
 UserType: CHAR(5)

Таблица пользовательских типов

 UserType: CHAR(5) PRIMARY KEY
 Description: VARCHAR(50)

Таблица UserRatingList

 UserRatingCode: CHAR(5) PRIMARY KEY
 UserType: CHAR(5) REFERENCES UserTypes
 Description: VARCHAR(50)

Таблица пользовательских рейтингов

 UserID: INTEGER PRIMARY KEY / REFERENCES Users
 UserRatingCode: CHAR(5) PRIMARY KEY / REFERENCES UserRatingList
 Rating: INTEGER (or whatever you prefer)

Таблица UserRatingList устанавливает шаблон рейтингов, который можно применять к каждому типу пользователя. UserRatings содержит актуальные рейтинги. Я использую CHAR (5) для читаемых провайдером кодов без необходимости присоединяться к полям описания, но вы можете изменить их на INTEGER, если хотите.

Эта структура также может быть адаптирована, чтобы позволить каждому пользователю иметь несколько типов; просто создайте дополнительную таблицу UserTypeLinks с UserID и UserType.

0 голосов
/ 24 ноября 2010

Будут ли все поля иметь «рейтинги» с одинаковым типом данных? Если так, то мне нравится решение Ларри Люстига.

Или могут быть несвязанные поля с разными типами данных? даты, строки, десятичные числа, целые числа? Если это так, первое решение, состоящее из 1 к 1 связанным таблицам, которые объединяются с пользователями, - ОК Пока вам не нужно динамически добавлять новые поля во время выполнения.

...