![]() |
|
Модераторы: LSD |
![]()
|
|
| DragonFire |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: нет Всего: 9 |
Всем добрый день, вечер, ночь.
Такая ситуация - есть таблица с пользователями UserTable, у них есть UserID (ключевое) и Login. Есть таблица с людьми PeopleTable. Причем каждый человек - определенный пользователь. Тоесть в таблице есть поля UserID, Имя, Фамилия. Ключевого поля у человека уже нету. Теперь у нас есть еще 2 таблицы - начальники и подчиненные к примеру. Неважно - суть в том, что обе таблицы зависят от таблицы PeopleTable. Пусть это будут Table1 и Table2 - у каждой из них опять же есть поле UserID и какие-либо свои поля. Теперь вопрос - как правильно организовать такую структуру. У меня сейчас все сделанно на связях 1 к 1. Но получается, что при добавлении пользователя добавляется сразу человек, начальник и подчиненный. Задача: Чтобы можно было добавить отдельно пользователя. Чтобы при добавлении человека автоматически добавлялся новый пользователь. Чтобы при добавлении начальника или подчиненного автоматически добавлялся человек и соответственно пользователь. Подскажите как реализовать, либо я не понимаю связь 1 к 1, либо тут нужна не она... Заранее спасибо всем откликнувшимся |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: нет Всего: 133 |
UserID - int
Login - str Фамилия - str Имя - str Начальник - bool Другие поля Если поле "Начальник" = True, значит перед нами начальник, если False, значит подчиненный. Получается все в одной таблице. Или я что-то не так понял -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| aleksh |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 609 Регистрация: 8.7.2008 Репутация: 2 Всего: 13 |
уточнение: в постановке есть три вопроса, а зачем там третий? добавление идет с одной стандартной формы?
в общем, такое предложение: 4 не связаных между собой таблицы, у каждой есть поле guid, которое на создается самостоятель (разве что в таблице юзеров) - если создается пользователь - создается guid и имя в юзуртабле + в пиплтабле добавляется созданный guid и доп инфа - в пипл табле булево поле (табл1 или табл2), от галочки на форме отмечается это поле + добавление в соответств табл созданный guid плюс доп инфа потом при запросе писать что-то вроде (... where tbUser.id = tbOne.id...) Добавлено через 1 минуту и 8 секунд совсем забыл: при такой постановке логика выносится в по. такой вариант приемлем? |
|||
|
||||
| DragonFire |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: нет Всего: 9 |
Poseidon, непоняли
Теоретически кроме начальника и подчиненного могут быть еще уборщик и кассирша к примеру. И у каждого из этих классом свои поля - в любом случае таблицы должны быть свои для каждого из них... aleksh, Вся логика будет лежать в ASP.NET. От БД требуется лишь структура таблиц и необходимые хранимые процедуры. |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 13 Всего: 454 |
Почему это не собрано в одну таблицу? какой в том великий смысл? Опять же - почему две таблицы, а не одна? К тому же начальник одного в то же время может быть подчиненным другого - как будешь выкручиваться? А в одной таблице хранится тривиальное дерево подчиненностей... если конечно нет мультиподчиненности - тогда отдельная таблица зависимостей.
Должно быть так: добавляется человек, и при этом резервируется возможность указать его начальника, его логин, и переназначить на него подчиненных от других начальников. У чела может не быть логина или там начальника, а вот если чела нет - то нет и всего остального. Чел первичен, и все пляшет от таблицы людей. Любая другая схема - нелогична. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| DragonFire |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: нет Всего: 9 |
Представь что у нас есть администраторы. У них есть логин и пароль но нету имени фамилии и т.д. Выделяем логин в отдельную таблицу UserTable. Далее у всех людей работающих на фирме есть имя фамилия - вот таблица с людьми. Потом у начальника есть поле кабинет, у подчиненного стаж. Теперь добавим еще кассира у которого есть поле кассовый аппарат. Итого различные данные на каждого из них, зато у всех есть имя фамилия. Поэтому еще таблицы пишем как бы "надстраивая" их над PeopleTable. Уже объяснил. На данный момент считается, что один человек не может принадлежать к разным "кастам". Хотя если даже и может, то я послушал бы идеи ваши... Согласен. А как это отразится на структуре БД? Если можно попроще, недавно начал заниматься базами данных... |
|||
|
||||
| Akina |
|
||||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 13 Всего: 454 |
То есть у одного человека может быть несколько логинов, так? А раньше кто-то утверждал, что "каждый человек - определенный пользователь" - кто бы это мог быть?
На каждый тип свойств новую таблицу заводить, что ли? Бредятина. Таблица, связывающая чела и свойства. А свойство уже имеет тип (из отдельной таблицы - номер кабинета, наличие кассового аппарата, номер телефона и пр.) и значение. Элементарно. Ее нужно делать заново. С нуля. Но предварительно прочитать и усвоить все, что написано о нормализации данных. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
| DragonFire |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: нет Всего: 9 |
И сейчас утверждаю. Не вижу противоречия в своих словах. Есть юзер. Он строго либо администратор либо какой-либо человек (опять же не буду перечислять). Вы хотите хранить всех пользователей в одной таблице. Но я не понимаю почему у нас при этом не возникнет избыточности данных. Ведь у одного пользователя есть поле кабинет, а у другого его нет - значит в таблице остается пустым (или я хз как).
Спасибо очень дельный совет. Я и без подколов знаю что Вы опытнее меня в проектировании БД, поэтому и прошу о помощи... Не хотите объяснять нормально, отлично, другие темы там: =>>>> |
||||
|
|||||
| aleksh |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 609 Регистрация: 8.7.2008 Репутация: 2 Всего: 13 |
"ребята, давайте жить дружно" (а это кто говорил? -- шутка)
toAkina: человек - пользователь -- это просто наличие жесткой связки, а кол-во связей не уточнялось; все логично, по моему toDragonFire: мною предложенное подходит? могу нарисовать (сейчас лень, а то вдруг -- не надо), галочку меняем на список и масштабируемость "как надо" Это сообщение отредактировал(а) aleksh - 7.8.2008, 11:35 |
|||
|
||||
| DragonFire |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: нет Всего: 9 |
aleksh, Да примерно так ща делаю
Разорвал связи сделал 1 ID на всех. Добавил таблицу с ролями - в ней указано какому юзеру соотвествует какая рлоль - начальник, подчиненный и т.д. Теперь если я захочу сделать одного человек и начальником и подчиненным мне достаточно будет добавить новую роль ему Спасибо огромное, на правильную мысль натолкнул |
|||
|
||||
| aleksh |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 609 Регистрация: 8.7.2008 Репутация: 2 Всего: 13 |
если все так хорошо, то, наверное, можно и галочку ставить
|
|||
|
||||
| DragonFire |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: нет Всего: 9 |
Пожалуй да... Если кто будет сталкиваться с такой-же проблемой пишите в ICQ...
Я не говорю что сделал все правильно, но я сделал удобно и работает |
|||
|
||||
| lukash256 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 23.7.2007 Где: Гомель/Беларусь Репутация: нет Всего: нет |
хорошим финалом был бы рисунок всей структуры БД. Так, фор экзампл.
|
|||
|
||||
| DragonFire |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: нет Всего: 9 |
Вот так выглядит БД, аналогично таблице Person добавляем сколько угодно таблиц с полем UID и пишем ХП которые при добавлении персона сами создают юзера и присваивают нужную роль.
Например при создании персоны присваивается роль Person автоматически - реализовать не сложно, зато потом оч удобно работать с такой БД... Естественно через ХП... *ХП - хранимые процедуры на всякий... |
|||
|
||||
![]()
|
| Правила форума "Общие вопросы по базам данных" | |
|
|
Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:
Данный форум не предназначен для:
Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение.
Полезные советы: Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | СУБД, общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |