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

Форум MySQL

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

 

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

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

тема: Структура БД. Нужен совет
 
 автор: Alexneo   (22.11.2007 в 04:06)   письмо автору
 
 

Доброго времени суток, встала задача в организации некой базы учеников образовательных учреждений, впринципе структуру могу и сам разработать, но все же хотелось узнать решение предложенное знатоками). Теперь непосредственно описание задачи

Информация делится на несколько логически объединенных блоков:
ЛИЧНЫЕ ДАННЫЕ,ОБРАЗОВАНИЕ,ОПЫТ РАБОТЫ,ЛИЧНЫЕ ДОСТИЖЕНИЯ.
Но количество блоков может добавляться/удаляться, скрываться/показываться
Каждый блок может содержать подблок данных. Например:
Личные данные: - пример одного блока
ФИО,Дата рождения,Телефон,E - mail,Семейное положение
ОБРАЗОВАНИЕ: - пример другого блока
Начало обучения, Конец обучения, Учебное заведение, Специальность


Поля подблоков тоже не статичны - могут добавляться/удаляться, скрываться/показываться.

Предложите что-нибудь...

   
 
 автор: morkovkin   (22.11.2007 в 11:25)   письмо автору
 
   для: Alexneo   (22.11.2007 в 04:06)
 

Простым способом будет просто задать все эти параметры в одну строчку, тоесть создать бд, создать таблицу, такой структуры:
id, fio,data_rozhd, telefon, email, sem_polozh, nachalo_obuch,konec_obuch и т.д...
Чтобы скрыть какие-то поля, просто не выводите их.
Это самый простой и удобный способ, добавление новой записи ко всем, также не составит труда.

Второй способ, более не удобный и может не правильный:

Создать базу - ucheniki.

Создать таблицы:
lich_dannie
obrazovanie
opit_raboti
lichnie_dostizheniya

lich_dannie, структура такая:
id - номер этого ученика.
fio
data_rozhd
telefon
email
sem_polozh

В остальных таблицах использовать id-пользователя, тоесть в каждой таблице должен быть id.

p.s. Я бы выбрал первый способ.

   
 
 автор: Alexneo   (22.11.2007 в 12:45)   письмо автору
 
   для: morkovkin   (22.11.2007 в 11:25)
 

первый способ не подходит т.к. количество полей не фиксированное, а для каждого ученика может меняться(добавляться новые), также блоки могут для какого-либо ученика появляться тоже новые.

второй способ тоже не подходит, т.к. при создании нового блока, надо заводить новую таблицу.

   
 
 автор: Trianon   (22.11.2007 в 21:11)   письмо автору
 
   для: Alexneo   (22.11.2007 в 12:45)
 

Вы уж определитесь со степенью абстрагирования.
Либо Вы хотите БД для обучения, и тогда нужно опираться на учеников, лекции, тесты, зачеты.
Либо Вы хотите БД для Content Management System, и тогда опираться придется на папки, документы, параграфы, рисунки, таблицы, строки, столбцы, ячейки.

Что-нибудь одно. Или - Или.

   
 
 автор: Alexneo   (22.11.2007 в 22:01)   письмо автору
 
   для: Trianon   (22.11.2007 в 21:11)
 

в общем так, база будет отображаться на сайте, а также редактироваться через админку aka CMS..

я вот тут подумал что если допустим сделать так:


/* Таблица блоков информации */

CREATE TABLE IF NOT EXISTS `fair_blocks` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(200) NOT NULL default '',
  `visible` enum('1','0') NOT NULL default '1',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 ;

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

INSERT INTO `fair_blocks` (`id`, `name`, `visible`) VALUES
(1, 'Личные данные', '1'),
(2, 'Цель', '1'),
(3, 'Образование', '1'),
(4, 'Опыт работы', '1'),
(5, 'Дополнительное образование', '1'),
(6, 'Личные достижения', '1'),
(7, 'Личные качества', '1'),
(8, 'Дополнительная информация', '1');

/* Таблица учеников */

CREATE TABLE IF NOT EXISTS `fair_students` (
  `id` int(11) NOT NULL auto_increment,
  `block_id` int(11) NOT NULL default '0',
  `info` mediumtext NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;


Допустим добавляем нового ученика, у которого есть блоки Личные данные, Цель.Для этого заводим массив(через пхп):


$lichnie_dannie=array(
                                "ФИО:"=>"Иванов Иван Иванович",
                                "Дата рождения:"=>"15.02.1990",
                                "Cемейное положение:"=>"Холост"
                                );

$str_to_db=serialize($lichnie_dannie);

затем вставляем запись в таблицу `fair_students`:

 INSERT INTO `fair_students` VALUES(NULL,'1','$str_to_db');


также поступаем и с блоком Цель.

Но мне не нравится что в бд хранить массив, потом сложность в обработке, но опять же например если надо в личные данные добавить еще какой-нибудь подблок то просто выбираем из базы ранее записанный туда массив, добавляем ключ->значение, запаковываем массив в строку и снова в БД.

Не совсем удобен мой вариант, я бы даже сказал вообще не удобен, но тем не менее работоспособен.

жду рекомендаций. спс.

   
 
 автор: Alexneo   (23.11.2007 в 00:35)   письмо автору
 
   для: Alexneo   (22.11.2007 в 22:01)
 

решил проблему. для блоков, подблоков и учеников создал 3 разные таблицы.

   
Rambler's Top100
вверх

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