|
|
|
| Стоит задание написать модуль "Сообщества" к социальной сети.
Сообщества такие:
Школа
Колледж
Институт
Армия
Компания
Список может расшириться.
Сначала думала сделать на каждое сообщество по одной таблице, что-то типа:
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. По этим сообществам после нужно будет поиск делать - это тоже нужно учесть. | |
|
|
|
|
|
|
|
для: Лена
(17.09.2010 в 22:22)
| | Постойте-ка.
Сообщества - это аналог групп "Вконтакте"?
Если да, то вряд ли эти два модуля являются аналогичными: ведь школа номер 25 в данном городе одна. Но кто вам сказал, что ученики этой школы не могу создать несколько сообществ учеников 25 школы? | |
|
|
|
|
|
|
|
для: neadekvat
(17.09.2010 в 23:31)
| | Как "В контакте", я не знаю...
Группы у меня уже есть. Группы там больше по интересам - политика, религия, кулинария и т.д.
Здесь больше привязка ко времени.
Получается, мне надо создать еще одну таблицу для школ, где будут эти сообщества, и по две таблицы для армии, колледжа, института - одна таблица с данными(адрес, привязка к городу), другая, с ней связанная по ключу, описывающая сообщество армии, института, колледжа... | |
|
|
|
|
|
|
|
для: Лена
(18.09.2010 в 10:49)
| | >Получается, мне надо создать еще одну таблицу для школ, где будут эти сообщества, и по две таблицы для армии, колледжа, института
Вот сколько ни пиши, что число таблиц в приличной модели не должно зависеть от числа описываемых объектов... эх... | |
|
|
|
|
|
|
|
для: Trianon
(18.09.2010 в 12:24)
| | Тогда так.
одна таблица - comunity_category, виды сообществ
вторая - comunity_detail - сообщества с привязкой к пользователю,
и таблицы army,college... - где постоянные характеристики типа адреса, привязки к городу и региону - вот здесь все равно будет учитываться число описываемых объектов. | |
|
|
|
|
|
|
|
для: Лена
(18.09.2010 в 15:02)
| | дыкть поэтому и не должно быть таких таблиц как army colledge итп.
Так как, когда возникнет нужда внести в проект группировку по местам не столь отдаленным (к примеру) придется добавлять таблицу prison.
Не должно такое быть.
Должна добавиться строка в таблицу группировок.
Возможно еще - строки в таблицу характеристик группировок.
Но не таблицы.
За рамки языка DML Вы выходить не должны.
а добавление таблицы - это уже DDL | |
|
|
|
|
|
|
|
для: 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... | |
|
|
|
|
 122.2 Кб |
|
|
для: Лена
(18.09.2010 в 15:18)
| | Сделала общую таблицу - community_all.
См. аттач. | |
|
|
|
|
 20.9 Кб |
|
|
для: Лена
(18.09.2010 в 16:50)
| | вот | |
|
|
|
|
|
|
|
для: Trianon
(18.09.2010 в 17:18)
| | Спасибо.
Город-регион страна - эти поля в Community будут?
Почему года пребывания в таблице attend, а не в Community? | |
|
|
|
|
|
|
|
для: Лена
(18.09.2010 в 17:44)
| | >Спасибо.
>Город-регион страна - эти поля в Community будут?
Я так понял, это Ваша таблица Community_info ( я её обозвал address)
>Почему года пребывания в таблице attend, а не в Community?
attend - фактически это Ваши таблицы comm_all и comm_detail
Я не понял, почему Вы их распилили.
Если нужно - распилите заново :) | |
|
|
|
|
|
|
|
для: Trianon
(18.09.2010 в 20:08)
| | >>Спасибо.
>>Город-регион страна - эти поля в Community будут?
>Я так понял, это Ваша таблица Community_info ( я её обозвал address)
да, так и есть :)
>>Почему года пребывания в таблице attend, а не в Community?
>attend - фактически это Ваши таблицы comm_all и comm_detail
>Я не понял, почему Вы их распилили.
>Если нужно - распилите заново :)
Почему разбила на две. С сообществами я знакома мало. В основном таблицы я составляла исходя из того, что после нужно будет делать поиск по сообществам. В поиске - разные фильтры - типа выбрать всех, которые учились с... по.. Или выбрать всех, кто учился в городе... регионе... Чтобы не запутаться в этих фильтрах, решила вынести характеристики в отдельную таблицу comm_detail и привязать ее к comm_all по ключу. | |
|
|
|