Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проектирование базы
 
 автор: Лена   (17.09.2010 в 22:22)   письмо автору
 
 

Стоит задание написать модуль "Сообщества" к социальной сети.
Сообщества такие:
Школа
Колледж
Институт
Армия
Компания
Список может расшириться.

Сначала думала сделать на каждое сообщество по одной таблице, что-то типа:

CREATE TABLE IF NOT EXISTS `community_college` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `userId` int(11) NOT NULL DEFAULT '0', //пользователь
  `collegeYearIn` int(4) NOT NULL DEFAULT '0',//год поступления
  `collegeYearOut` int(4) NOT NULL DEFAULT '0',//год окончания
  `collegeNum` int(9) NOT NULL DEFAULT '0', //название
  `collegeClass` int(11) NOT NULL DEFAULT '0',//класс(взвод и т.д.)
  `collegeCountry` int(9) NOT NULL DEFAULT '1', //страна - id
  `collegeRegion` int(9) NOT NULL DEFAULT '0',//регион - id
  `collegeCity` int(9) NOT NULL DEFAULT '0', //город - id
  `collegeAddress` varchar(50) NOT NULL DEFAULT '0', //адрес заведения
  PRIMARY KEY (`id`),
  KEY `userId` (`userId`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;



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

CREATE TABLE `community_categ` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

И общую таблицу community_detail, аналогичную по структуре, которую я привела в первом фрагменте + еще одно поле community_id, связь с таблицей community_categ.
Но.
До этого я писала модуль "Страна-регион-город-школа" и у меня уже есть таблица школ:

CREATE TABLE `loc_school` (
  `id` int(9) NOT NULL auto_increment,
  `schoolNum` varchar(50) NOT NULL default '',
  `countryId` int(9) NOT NULL default '1',
  `regionId` int(9) NOT NULL default '0',
  `cityId` int(9) NOT NULL default '0',
  `address` varchar(50) NOT NULL default '0',
  PRIMARY KEY  (`id`),
  KEY `countryId` (`countryId`),
  KEY `regionId` (`regionId`),
  KEY `cityId` (`cityId`)
) ENGINE=MyISAM AUTO_INCREMENT=75 DEFAULT CHARSET=utf8 AUTO_INCREMENT=75 ;


Получается, что если я в таблицу сообществ включу школу, то у меня в таблицах community_detail и loc_school данные будут повторяться. Но школа - это тоже сообщество.
Запуталась :) и прошу совета. Как мне все организовать?

PS. По этим сообществам после нужно будет поиск делать - это тоже нужно учесть.

  Ответить  
 
 автор: neadekvat   (17.09.2010 в 23:31)   письмо автору
 
   для: Лена   (17.09.2010 в 22:22)
 

Постойте-ка.
Сообщества - это аналог групп "Вконтакте"?
Если да, то вряд ли эти два модуля являются аналогичными: ведь школа номер 25 в данном городе одна. Но кто вам сказал, что ученики этой школы не могу создать несколько сообществ учеников 25 школы?

  Ответить  
 
 автор: Лена   (18.09.2010 в 10:49)   письмо автору
 
   для: neadekvat   (17.09.2010 в 23:31)
 

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

  Ответить  
 
 автор: Trianon   (18.09.2010 в 12:24)   письмо автору
 
   для: Лена   (18.09.2010 в 10:49)
 

>Получается, мне надо создать еще одну таблицу для школ, где будут эти сообщества, и по две таблицы для армии, колледжа, института

Вот сколько ни пиши, что число таблиц в приличной модели не должно зависеть от числа описываемых объектов... эх...

  Ответить  
 
 автор: Лена   (18.09.2010 в 15:02)   письмо автору
 
   для: Trianon   (18.09.2010 в 12:24)
 

Тогда так.
одна таблица - comunity_category, виды сообществ
вторая - comunity_detail - сообщества с привязкой к пользователю,
и таблицы army,college... - где постоянные характеристики типа адреса, привязки к городу и региону - вот здесь все равно будет учитываться число описываемых объектов.

  Ответить  
 
 автор: Trianon   (18.09.2010 в 15:09)   письмо автору
 
   для: Лена   (18.09.2010 в 15:02)
 

дыкть поэтому и не должно быть таких таблиц как army colledge итп.

Так как, когда возникнет нужда внести в проект группировку по местам не столь отдаленным (к примеру) придется добавлять таблицу prison.

Не должно такое быть.
Должна добавиться строка в таблицу группировок.
Возможно еще - строки в таблицу характеристик группировок.
Но не таблицы.

За рамки языка DML Вы выходить не должны.
а добавление таблицы - это уже DDL

  Ответить  
 
 автор: Лена   (18.09.2010 в 15:18)   письмо автору
 
   для: Trianon   (18.09.2010 в 15:09)
 

Три таблицы.
Одна - названия группировок + сюда строки добавить типа army_info, college_info...

CREATE TABLE `comunity_category` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;

-- 
-- Дамп данных таблицы `comunity_category`
-- 

INSERT INTO `comunity_category` VALUES (1, 'Army');
INSERT INTO `comunity_category` VALUES (2, 'College');
INSERT INTO `comunity_category` VALUES (3, 'Institute');
INSERT INTO `comunity_category` VALUES (4, 'Army_info');
INSERT INTO `comunity_category` VALUES (5, 'College_info');
INSERT INTO `comunity_category` VALUES (6, 'Institute_info');


Вторая - характеристики
третья - info, информация типа адреса, страны, региона данного объекта. Связь по ключу с первой - строки типа army_info, college_info...

  Ответить  
 
 автор: Лена   (18.09.2010 в 16:50)   письмо автору
122.2 Кб
 
   для: Лена   (18.09.2010 в 15:18)
 

Сделала общую таблицу - community_all.
См. аттач.

  Ответить  
 
 автор: Trianon   (18.09.2010 в 17:18)   письмо автору
20.9 Кб
 
   для: Лена   (18.09.2010 в 16:50)
 

вот

  Ответить  
 
 автор: Лена   (18.09.2010 в 17:44)   письмо автору
 
   для: Trianon   (18.09.2010 в 17:18)
 

Спасибо.
Город-регион страна - эти поля в Community будут?
Почему года пребывания в таблице attend, а не в Community?

  Ответить  
 
 автор: Trianon   (18.09.2010 в 20:08)   письмо автору
 
   для: Лена   (18.09.2010 в 17:44)
 

>Спасибо.
>Город-регион страна - эти поля в Community будут?
Я так понял, это Ваша таблица Community_info ( я её обозвал address)
>Почему года пребывания в таблице attend, а не в Community?
attend - фактически это Ваши таблицы comm_all и comm_detail
Я не понял, почему Вы их распилили.
Если нужно - распилите заново :)

  Ответить  
 
 автор: Лена   (19.09.2010 в 00:04)   письмо автору
 
   для: Trianon   (18.09.2010 в 20:08)
 

>>Спасибо.
>>Город-регион страна - эти поля в Community будут?
>Я так понял, это Ваша таблица Community_info ( я её обозвал address)

да, так и есть :)

>>Почему года пребывания в таблице attend, а не в Community?
>attend - фактически это Ваши таблицы comm_all и comm_detail
>Я не понял, почему Вы их распилили.
>Если нужно - распилите заново :)

Почему разбила на две. С сообществами я знакома мало. В основном таблицы я составляла исходя из того, что после нужно будет делать поиск по сообществам. В поиске - разные фильтры - типа выбрать всех, которые учились с... по.. Или выбрать всех, кто учился в городе... регионе... Чтобы не запутаться в этих фильтрах, решила вынести характеристики в отдельную таблицу comm_detail и привязать ее к comm_all по ключу.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования