Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Структура БД  (Прочитано 10766 раз)
0 Пользователей и 1 Гость смотрят эту тему.
timewriter
Гость
« : 11-10-2006 06:19 » 

 А черт его знает...
Здравствуйте, уважаемые программисты.
Я пришел к Вам с вопросом и очень надеюсь на ваш отклик.

Задание:
Построить БД, где есть таблицы:

ШкольникиПодгруппыКлассы

Связь
Классы-Подгруппы, понятно, 1 к многим и
Подгруппы-Школьники 1 к многим,

НО(!) один класс может быть разбит на несколько подгрупп, по нескольким критериям (например, в Пн уроки мальчики/девочки, а во Вт - 1-я/2-я группа английского)

Помогите, пожалуйста, с логической задачкой.
Записан
timewriter
Гость
« Ответ #1 : 11-10-2006 07:01 » 

Т.е. Подгруппы-Школьники многие ко многим.
я думаю, что между ними нужно поставить табличку Критерии, но как в полях это организовать я не знаю...
если школльники подчинены таблице группы, а групп несколько и один ученик может быть подченен нескольким группам,
как будет выглядеть последующая выборка, если, допустим, нужно будет выбрать всех школьников класса
 хелп! плизззз!
Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #2 : 11-10-2006 07:07 » 

таличка class
ID
Number // цифра
Symbol // буква
последние два поля можно объеденить

табличка students
ID
CLASS_ID
NAME

табличка groups
ID
NAME

табличка studentsgroup
ID
GROUPS_ID
STUDENTS_ID

думаю связи понятны из названия полей
Записан

Странно всё это....
timewriter
Гость
« Ответ #3 : 11-10-2006 07:29 » 

Все ясно, спасиб огромное!!!
Записан
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #4 : 11-10-2006 08:29 » 

по-моему, столбец studentsgroup.id здесь совсем не обязателен.
это стандартная реализация связи много-ко-многим.
она всегда реализуется через промежуточную таблицу.
Записан

Удачного всем кодинга! -=x[PooH]x=-
timewriter
Гость
« Ответ #5 : 11-10-2006 08:44 » 

Да, именно это я и имел в виду. Вопрос стоял в реализации.

Огромное сенкс!
Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #6 : 11-10-2006 13:10 » 

PooH, конечно не обязателен, но так на будующее Улыбаюсь вдруг понадобится именно эта запись.

timewriter, не за что.
Записан

Странно всё это....
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #7 : 11-10-2006 13:18 » 

LogRus, ну при такой структуре это явный избыток данных... комбинация двух столбцов однозначно определяет конкретную запись.

Для саморазвития, так сказать, приведи пример когда теоретически может понадобится ID.
Записан

Удачного всем кодинга! -=x[PooH]x=-
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 11-10-2006 16:01 » 

Цитата: PooH
Для саморазвития, так сказать, приведи пример когда теоретически может понадобится ID.
Можно переформулировать вопрос в терминах ООП: когда нужен ассоциативный класс?

Грубый пример:
Лицо 1:М Паспорт М:1 Страна
(Случай двойного гражданства, если для простоты допустить в каждой стране наличие системы паспортизации граждан.)

Паспорт имеет самостоятельный смысл.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #9 : 12-10-2006 05:12 » 

PooH, не хочешь не ешь. Улыбаюсь Идей нет.
Вот у dimka есть идея! в качестве ID использовать номер паспорта
Так, что на всякий случай вполне допустимо не смотря на некоторый overhead по данным
Записан

Странно всё это....
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #10 : 12-10-2006 05:37 » 

у dimk-и ID получается не уникальным, соответственно, по нему нельзя отпределить запись, а однозначно можно определить только по Лицу и Стране. То есть приходим к тому же.
Но это по-моему, эже оффтоп пошел Улыбаюсь
Записан

Удачного всем кодинга! -=x[PooH]x=-
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 13-10-2006 05:45 » 

Цитата: LogRus
Вот у dimka есть идея! в качестве ID использовать номер паспорта
Этого я не говорил, в данном случае первичным ключом может быть как минимум номер паспорта + название страны, поскольку в каждой стране своя нумерация паспортов.

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

Ещё один грубый пример:
Элеватор 1:М Хлебозавод (мельница и пекарня) М:1 Магазин

Не знаю, в какой задаче может понадобиться, но тем не менее Улыбаюсь Зерно с одного элеватора может поступать во многие магазины, в каждый магазин может поступать хлеб, произведённый из хранящегося в разных элеваторах зерна. Пример грубый, поскольку фактически там будет 2 отношения М:М (хлебозаводы могут получать зерно с разных элеваторов и хлебозаводы могут поставлять хлеб во многие магазины), но чтобы в этой цепочке углядеть искомое, я упростил до 1:М Улыбаюсь.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines