Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Структура базы данных, помогите составить 
V
    Опции темы
DragonFire
Дата 7.8.2008, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 14.8.2005
Где: Москва

Репутация: нет
Всего: 9



Всем добрый день, вечер, ночь.

Такая ситуация - есть таблица с пользователями UserTable, у них есть UserID (ключевое) и Login. Есть таблица с людьми PeopleTable. 
Причем каждый человек - определенный пользователь. Тоесть в таблице есть поля UserID, Имя, Фамилия. Ключевого поля у человека уже нету.

Теперь у нас есть еще 2 таблицы - начальники и подчиненные к примеру. Неважно - суть в том, что обе таблицы зависят от таблицы PeopleTable. Пусть это будут Table1 и Table2 - у каждой из них опять же есть поле UserID и какие-либо свои поля.

Теперь вопрос - как правильно организовать такую структуру. У меня сейчас все сделанно на связях 1 к 1. Но получается, что при добавлении пользователя добавляется сразу человек, начальник и подчиненный.

Задача:
Чтобы можно было добавить отдельно пользователя.
Чтобы при добавлении человека автоматически добавлялся новый пользователь.
Чтобы при добавлении начальника или подчиненного автоматически добавлялся человек и соответственно пользователь.

Подскажите как реализовать, либо я не понимаю связь 1 к 1, либо тут нужна не она...
Заранее спасибо всем откликнувшимся smile



--------------------
PM MAIL ICQ   Вверх
Poseidon
Дата 7.8.2008, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: нет
Всего: 133



UserID - int
Login - str
Фамилия - str
Имя - str
Начальник - bool
Другие поля

Если поле "Начальник" = True, значит перед нами начальник, если False, значит подчиненный.

Получается все в одной таблице. Или я что-то не так понял  smile 


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
aleksh
Дата 7.8.2008, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: 2
Всего: 13



уточнение: в постановке есть три вопроса, а зачем там третий? добавление идет с одной стандартной формы?

в общем, такое предложение: 4 не связаных между собой таблицы, у каждой есть поле guid, которое на создается самостоятель (разве что в таблице юзеров)
- если создается пользователь - создается guid и имя в юзуртабле + в пиплтабле добавляется созданный guid и доп инфа
- в пипл табле булево поле (табл1 или табл2), от галочки на форме отмечается это поле + добавление в соответств табл созданный guid плюс доп инфа

потом при запросе писать что-то вроде (... where tbUser.id = tbOne.id...)

Добавлено через 1 минуту и 8 секунд
совсем забыл: при такой постановке логика выносится в по. такой вариант приемлем?
PM MAIL   Вверх
DragonFire
Дата 7.8.2008, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 14.8.2005
Где: Москва

Репутация: нет
Всего: 9



Poseidon, непоняли smile
Теоретически кроме начальника и подчиненного могут быть еще уборщик и кассирша к примеру.
И у каждого из этих классом свои поля - в любом случае таблицы должны быть свои для каждого из них...

aleksh, 
Вся логика будет лежать в ASP.NET. От БД требуется лишь структура таблиц и необходимые хранимые процедуры. 



--------------------
PM MAIL ICQ   Вверх
Akina
Дата 7.8.2008, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 13
Всего: 454



Цитата(DragonFire @  7.8.2008,  01:16 Найти цитируемый пост)
есть таблица с пользователями UserTable, у них есть UserID (ключевое) и Login. Есть таблица с людьми PeopleTable. 
Причем каждый человек - определенный пользователь. Тоесть в таблице есть поля UserID, Имя, Фамилия. Ключевого поля у человека уже нету.

Почему это не собрано в одну таблицу? какой в том великий смысл?

Цитата(DragonFire @  7.8.2008,  01:16 Найти цитируемый пост)
у нас есть еще 2 таблицы - начальники и подчиненные к примеру.

Опять же - почему две таблицы, а не одна? К тому же начальник одного в то же время может быть подчиненным другого - как будешь выкручиваться? А в одной таблице хранится тривиальное дерево подчиненностей... если конечно нет мультиподчиненности - тогда отдельная таблица зависимостей.

Цитата(DragonFire @  7.8.2008,  01:16 Найти цитируемый пост)
получается, что при добавлении пользователя добавляется сразу человек, начальник и подчиненный.

Должно быть так: добавляется человек, и при этом резервируется возможность указать его начальника, его логин, и переназначить на него подчиненных от других начальников. У чела может не быть логина или там начальника, а вот если чела нет - то нет и всего остального. Чел первичен, и все пляшет от таблицы людей. Любая другая схема - нелогична.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
DragonFire
Дата 7.8.2008, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 14.8.2005
Где: Москва

Репутация: нет
Всего: 9



Цитата(Akina @  7.8.2008,  10:21 Найти цитируемый пост)

Почему это не собрано в одну таблицу? какой в том великий смысл?

Представь что у нас есть администраторы. У них есть логин и пароль но нету имени фамилии и т.д. Выделяем логин в отдельную таблицу UserTable. 
Далее у всех людей работающих на фирме есть имя фамилия - вот таблица с людьми.
Потом у начальника есть поле кабинет, у подчиненного стаж. Теперь добавим еще кассира у которого есть поле кассовый аппарат. Итого различные данные на каждого из них, зато у всех есть имя фамилия. Поэтому еще таблицы пишем как бы "надстраивая" их над PeopleTable.
Цитата(Akina @  7.8.2008,  10:21 Найти цитируемый пост)
Опять же - почему две таблицы, а не одна? К тому же начальник одного в то же время может быть подчиненным другого - как будешь выкручиваться? А в одной таблице хранится тривиальное дерево подчиненностей... если конечно нет мультиподчиненности - тогда отдельная таблица зависимостей.

Уже объяснил. На данный момент считается, что один человек не может принадлежать к разным "кастам". Хотя если даже и может, то я послушал бы идеи ваши...
Цитата(Akina @  7.8.2008,  10:21 Найти цитируемый пост)
Должно быть так: добавляется человек, и при этом резервируется возможность указать его начальника, его логин, и переназначить на него подчиненных от других начальников. У чела может не быть логина или там начальника, а вот если чела нет - то нет и всего остального. Чел первичен, и все пляшет от таблицы людей. Любая другая схема - нелогична. 

Согласен. А как это отразится на структуре БД? Если можно попроще, недавно начал заниматься базами данных... 



--------------------
PM MAIL ICQ   Вверх
Akina
Дата 7.8.2008, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 13
Всего: 454



Цитата(DragonFire @  7.8.2008,  11:30 Найти цитируемый пост)
Представь что у нас есть администраторы. У них есть логин и пароль но нету имени фамилии и т.д.

То есть у одного человека может быть несколько логинов, так? А раньше кто-то утверждал, что "каждый человек - определенный пользователь" - кто бы это мог быть?

Цитата(DragonFire @  7.8.2008,  11:30 Найти цитируемый пост)
Поэтому еще таблицы пишем как бы "надстраивая" их над PeopleTable.

На каждый тип свойств новую таблицу заводить, что ли? Бредятина. Таблица, связывающая чела и свойства. А свойство уже имеет тип (из отдельной таблицы - номер кабинета, наличие кассового аппарата, номер телефона и пр.) и значение.

Цитата(DragonFire @  7.8.2008,  11:30 Найти цитируемый пост)
как это отразится на структуре БД? 

Элементарно. Ее нужно делать заново. С нуля. Но предварительно прочитать и усвоить все, что написано о нормализации данных.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
DragonFire
Дата 7.8.2008, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 14.8.2005
Где: Москва

Репутация: нет
Всего: 9



Цитата(Akina @  7.8.2008,  10:48 Найти цитируемый пост)
То есть у одного человека может быть несколько логинов, так? А раньше кто-то утверждал, что "каждый человек - определенный пользователь" - кто бы это мог быть?

И сейчас утверждаю. Не вижу противоречия в своих словах. Есть юзер. Он строго либо администратор либо какой-либо человек (опять же не буду перечислять).
Цитата(Akina @  7.8.2008,  10:48 Найти цитируемый пост)
На каждый тип свойств новую таблицу заводить, что ли? Бредятина. Таблица, связывающая чела и свойства. А свойство уже имеет тип (из отдельной таблицы - номер кабинета, наличие кассового аппарата, номер телефона и пр.) и значение.

Вы хотите хранить всех пользователей в одной таблице. Но я не понимаю почему у нас при этом не возникнет избыточности данных. Ведь у одного пользователя есть поле кабинет, а у другого его нет - значит в таблице остается пустым (или я хз как).
Цитата(Akina @  7.8.2008,  10:48 Найти цитируемый пост)
Элементарно. Ее нужно делать заново. С нуля. Но предварительно прочитать и усвоить все, что написано о нормализации данных.

Спасибо очень дельный совет. Я и без подколов знаю что Вы опытнее меня в проектировании БД, поэтому и прошу о помощи... Не хотите объяснять нормально, отлично, другие темы там: =>>>>


--------------------
PM MAIL ICQ   Вверх
aleksh
Дата 7.8.2008, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: 2
Всего: 13



"ребята, давайте жить дружно" (а это кто говорил? -- шутка)

toAkina: человек - пользователь -- это просто наличие жесткой связки, а кол-во связей не уточнялось; все логично, по моему

toDragonFire: мною предложенное подходит? могу нарисовать (сейчас лень, а то вдруг -- не надо), галочку меняем на список и масштабируемость "как надо"

Это сообщение отредактировал(а) aleksh - 7.8.2008, 11:35
PM MAIL   Вверх
DragonFire
Дата 7.8.2008, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 14.8.2005
Где: Москва

Репутация: нет
Всего: 9



aleksh, Да примерно так ща делаю smile
Разорвал связи сделал 1 ID на всех. 
Добавил таблицу с ролями - в ней указано какому юзеру соотвествует какая рлоль - начальник, подчиненный и т.д.
Теперь если я захочу сделать одного человек и начальником и подчиненным мне достаточно будет добавить новую роль ему smile
Спасибо огромное, на правильную мысль натолкнул smile


--------------------
PM MAIL ICQ   Вверх
aleksh
Дата 7.8.2008, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: 2
Всего: 13



если все так хорошо, то, наверное, можно и галочку ставить
PM MAIL   Вверх
DragonFire
Дата 7.8.2008, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 14.8.2005
Где: Москва

Репутация: нет
Всего: 9



Пожалуй да... Если кто будет сталкиваться с такой-же проблемой пишите в ICQ...
Я не говорю что сделал все правильно, но я сделал удобно и работает smile


--------------------
PM MAIL ICQ   Вверх
lukash256
Дата 19.8.2008, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 23.7.2007
Где: Гомель/Беларусь

Репутация: нет
Всего: нет



хорошим финалом был бы рисунок всей структуры БД.  Так, фор экзампл.   smile 
PM MAIL ICQ   Вверх
DragonFire
Дата 22.8.2008, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 14.8.2005
Где: Москва

Репутация: нет
Всего: 9



Вот так выглядит БД, аналогично таблице Person добавляем сколько угодно таблиц с полем UID и пишем ХП которые при добавлении персона сами создают юзера и присваивают нужную роль.
Например при создании персоны присваивается роль Person автоматически - реализовать не сложно, зато потом оч удобно работать с такой БД... Естественно через ХП... 
*ХП - хранимые процедуры на всякий... 
user posted image


--------------------
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0770 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.