- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Зачем быть уникальным в мире, где все можно скопировать
Почему так важна уникальность текста и как она влияет на SEO
Ingate Organic
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Допустим есть несколько групп пользователей и каждая из них имеет разные параметры, но есть также общие (имя, логин, пароль).
Получается создаём:
1 таблицу с общими полями (id, name, login, password)
1 таблицу с группами (id,name,...)
и по таблице для каждой группы пользователей (Модераторы, Техподдержка, Админы), которые связываем 1:1 с таблицей общих полей (логин, пароль).
Нормальна ли такая нормализация?
Почему спрашиваю? Потому что, кое-где пишут, что если есть связь 1:1, то она ошибочна.
Я бы сделал так:
1. user_table: id, login, pass, group (id из таблицы групп)
2. group_table: id, group_name
3. group_param: id, param, group (id из таблицы групп)
Turtle_Fly, не совсем понятно. Допустим у пользователей "преподаватели" зарплата, а у пользователей "студенты" - стипендия. Куда вы занесёте сумму, и как потом узнаете где зарплата и где стипендия?
prometex добавил 11.12.2008 в 11:42
В любом случае Вы не сможете задать тип данных для каждого параметра. У Вас поля и возраст и должность и дата и время будут иметь одинаковый тип varchar или ещё хуже text
Если связь 1:1, то эти таблицы могут быть слиты в одну. Почему вы так не хотите сделать? Либо у вас не совсем 1:1, либо по каким-то причинам (много полей например) вы хотите оптимизировать запросы. В принципе, это не нарушение, но чаще оно просто не нужно.
Alipapa, предлагаете сделать так:
user_groups (id, name, rights)
user_students (id, group_id, name, login, password, grants, ...)
user_teachers (id, group_id, name, login, password, salary, ...)
И при авторизации проверять каждую таблицу на соответствие login/password, и в процессе добавления пользователей следить чтобы login не совпадал с логинами из других таблиц?
prometex добавил 11.12.2008 в 12:06
Или так:
user_groups (id, name, rigths)
users (id, group_id, name, login, password, grants=NULL,salary=NULL, ...=NULL, 63-е ... =NULL)?
Чтобы получилась таблица с несколькими сотнями полей?
Да, именно последний вариант классический. Но если у вас набор необходимых полей для каждой группы отличается и этот набор большой, то ваш подход правильный. И вообще, по-моему, у вас не 1:1, а 1:много - тогда тем более все нормально.
Именно 1:1
user_groups (id, name, rights)
users (id, group_id, name, login, password)
students (user_id, age, progress, grant)
teachers (user_id, hours, class, salary)
Выходит это единственное оптимальное решение..
А если количество юзеров не десятки тысяч и таблица будет грамотно проиндексирована - серверу будет раз плюнуть выбрать и обработать эти данные. Поэтому может быть и стоит последнему варианту внимание уделить?
Alipapa добавил 11.12.2008 в 12:43
Ну не вижу я, по какому полю какие таблицы в вашей схеме 1:1 связаны.
Alipapa добавил 11.12.2008 в 12:45
Кстати, пока я писал, не видел вашего последнего поста. Нормальная у вас схема, правильная.
Если взять 20 групп по 15 параметров в каждой, то получим таблицу, у которой будет 300 полей!
Причём каждая запись будет заполнять только 15, а остальные 285 будут NULL - это лучше чем связь 1:1?
user_groups (id, name, rights)
users (id, group_id, name, login, password)
students (user_id, age, progress, grant)
teachers (user_id, hours, class, salary)
Где здесь связь 1:1 ? Какие таблицы по каким полям так связаны? При всей моей фантазии могу найти только 1:много
Странно..
users:id (primary, autoincrement)
students:user_id (primary) -> users:id
teachers:user_id (primary) -> users:id
Пример записи
users:id [1,2,3,4,5,6,7,8]
students:user_id [1,2,3]
teachers:user_id [4,5,6]
sometable:user_id [7,8,...]