MySQL организация данных

Компьютеры. программирование, бытовая техника

Модератор: Саша З.

Аватара пользователя
teardrop
Новый участник
Сообщения: 14
Зарегистрирован(а): 21 авг 2002, 19:25
Откуда: is ru
Контактная информация:

MySQL организация данных

Сообщение teardrop » 25 авг 2002, 14:05

:14: :14: :14:

Здравствуйте, уважаемые посетители форума!

Буду очень Вам благодарен за помощь в решении следующей проблемы:

Проект предназначен для учебных заведений - типа он-лайн система уведомления и общения учащихся и учителей.

Существуют 3 кат. пользователей - ученик, учитель, администратор.

Доступные функции разгарничиваются соответственно категории пользователя (выставление, редактирование оценки, отправка сообщений, регистрация новых пользователей и т.д.)

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

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

Жду ваших предложений по наиболее удобной и логичной организации данных.


Используются следующие инструменты: Apache 1.3.23 PHP 4.1.1 (CGI) MySQL 3.23.49

Заранее благодарен!
:appl:
Бest РegarДz

Аватара пользователя
raffal
Ветеран мега-форума
Сообщения: 11209
Зарегистрирован(а): 20 ноя 2001, 02:00
Откуда: Россия

Сообщение raffal » 25 авг 2002, 19:14

Первый совет - забудьте про конкретный SQL-сервер, Ваша проблема лежит на уровне постановки задачи, аналитики структуры базы данных.

Или я что-то путаю, или у Грубера в "Понимании SQL" прямо такой пример и был - распределение прав доступа для разных категорий юзеров.
Прекратить дискриминацию российских евреев (и сочувствующих) на МФ !

Аватара пользователя
andre6b
Участник со стажем
Сообщения: 239
Зарегистрирован(а): 14 июл 2002, 18:33

Сообщение andre6b » 25 авг 2002, 20:25

Если еще не поздно, то может стоит пересмотреть выбор инструментов - мой личный опыт более чем 3-х летней работы с PHP весьма отрицательный. По существу же вопроса - то конкретная организация данных ОЧЕНЬ СИЛЬНО зависит от конкетных требований - что может делать каждый тип пользователей а что нет. Трудно дать общий совет. По тому описанию которое дано, я могу посоветовать имплементацию прав доступа на уровне веб аппликации (т.е. скриптов), а не базы данных - будет много проще (но больший риск со стороны хакеров).
Well...

Аватара пользователя
teardrop
Новый участник
Сообщения: 14
Зарегистрирован(а): 21 авг 2002, 19:25
Откуда: is ru
Контактная информация:

Сообщение teardrop » 25 авг 2002, 20:54

Первый совет - забудьте про конкретный SQL-сервер, Ваша проблема лежит на уровне постановки задачи, аналитики структуры базы данных.

Или я что-то путаю, или у Грубера в "Понимании SQL" прямо такой пример и был - распределение прав доступа для разных категорий юзеров.


да, проблема на уровне организации.
Теперь кто такой Грубер и что за "понимание" насколько я понимаю - книга, есть ли веб-вариант?

Если еще не поздно, то может стоит пересмотреть выбор инструментов - мой личный опыт более чем 3-х летней работы с PHP весьма отрицательный. По существу же вопроса - то конкретная организация данных ОЧЕНЬ СИЛЬНО зависит от конкетных требований - что может делать каждый тип пользователей а что нет. Трудно дать общий совет. По тому описанию которое дано, я могу посоветовать имплементацию прав доступа на уровне веб аппликации (т.е. скриптов), а не базы данных - будет много проще (но больший риск со стороны хакеров).


Альтернативы ПХП я, :13: извините, не вижу. Perl - старый, громоздкий холодильник. ASP - для желающих подвесить Dual P4-1700.

спасибо и на этом, видиом придется все делать "вручную"
Бest РegarДz

AlexZ75
Участник со стажем
Сообщения: 1304
Зарегистрирован(а): 18 ноя 2001, 02:00
Откуда: Петах-Тиква
Контактная информация:

Сообщение AlexZ75 » 25 авг 2002, 20:58

teardrop,
Проблема не PHP,ASP,Perl... Проблема абстрактной реализация БД.
Читать надо чего-нить по реляционным БД, задача элементарная, посмотри чего-нить на www.infocity.co.il.
Отличительная черта большинства туземцев - человеколюбие.

AlexZ75
Участник со стажем
Сообщения: 1304
Зарегистрирован(а): 18 ноя 2001, 02:00
Откуда: Петах-Тиква
Контактная информация:

Сообщение AlexZ75 » 25 авг 2002, 20:59

p.s. У меня ASP ничего не вешает :12: и на более слабой технике
Отличительная черта большинства туземцев - человеколюбие.

Аватара пользователя
raffal
Ветеран мега-форума
Сообщения: 11209
Зарегистрирован(а): 20 ноя 2001, 02:00
Откуда: Россия

Сообщение raffal » 25 авг 2002, 21:09

teardrop писал(а): Теперь кто такой Грубер и что за "понимание" насколько я понимаю - книга, есть ли веб-вариант?

Мартин Грубер, "Понимание SQL" - "альфа и омега", "библия" программистов баз данных.

Без ее прочтения - программист-базовик не является таковым даже с соответствующим дипломом :13: - говорю как таковой :rolleyes: с 10+ стажем :)

Зарядите поиск на http://ya.ru - найдете сотни ссылок на текст.
Прекратить дискриминацию российских евреев (и сочувствующих) на МФ !

Аватара пользователя
andre6b
Участник со стажем
Сообщения: 239
Зарегистрирован(а): 14 июл 2002, 18:33

Сообщение andre6b » 26 авг 2002, 11:42

teardrop писал(а):Альтернативы ПХП я, :13: извините, не вижу. Perl - старый, громоздкий холодильник. ASP - для желающих подвесить Dual P4-1700.

спасибо и на этом, видиом придется все делать "вручную"

Можно делать вручную - дело хозяйское. По поводу перла - у PHP есть все те же недостатки что и у него но нет такого количества уже готовых модулей. Работа с базами данных у перла производится через единый интерфейс. Я однако не утверждаю, что перл - лучшая альтернатива - он как и PHP скриптовой язык без типов - со всеми вытекающими.

ASP не намного медленнее PHP, хотя как язык не многим лучше.
Well...

Аватара пользователя
andre6b
Участник со стажем
Сообщения: 239
Зарегистрирован(а): 14 июл 2002, 18:33

Сообщение andre6b » 26 авг 2002, 11:42

teardrop писал(а):Альтернативы ПХП я, :13: извините, не вижу. Perl - старый, громоздкий холодильник. ASP - для желающих подвесить Dual P4-1700.

спасибо и на этом, видиом придется все делать "вручную"

Можно делать вручную - дело хозяйское. По поводу перла - у PHP есть все те же недостатки что и у него но нет такого количества уже готовых модулей. Работа с базами данных у перла производится через единый интерфейс. Я однако не утверждаю, что перл - лучшая альтернатива - он как и PHP скриптовой язык без типов - со всеми вытекающими.

ASP не намного медленнее PHP, хотя как язык не многим лучше.
Well...

Мусик
Участник форума
Сообщения: 65
Зарегистрирован(а): 22 июл 2002, 11:57
Откуда: Мейтaр

Сообщение Мусик » 26 авг 2002, 12:27

Пo сути:
решение вoзмoжнo через прoфили: ученик, учитель, aдминистрaтoр и т.д. Системa дoпускa через прoфили. Зaтем кaждый юзер привязaн к прoфилю. И вперед. :19:

Аватара пользователя
teardrop
Новый участник
Сообщения: 14
Зарегистрирован(а): 21 авг 2002, 19:25
Откуда: is ru
Контактная информация:

Сообщение teardrop » 26 авг 2002, 21:24

Проблема не PHP,ASP,Perl... Проблема абстрактной реализация БД.
Читать надо чего-нить по реляционным БД, задача элементарная, посмотри чего-нить на ...
...Жду ваших предложений по наиболее удобной и логичной организации данных...


p.s. У меня ASP ничего не вешает и на более слабой технике


это я сам хорошо понимаю. Если вы такой начитанный, сердечно попрошу оказать посильную помощь, и повнимательней читать сообщения. ASP тормознее ПХП - доказано научно, общественно и общепризнано.

Добавлено: 1030306148 Заголовок сообщения:

--------------------------------------------------------------------------------

teardrop писал(а):
Теперь кто такой Грубер и что за "понимание" насколько я понимаю - книга, есть ли веб-вариант?

Мартин Грубер, "Понимание SQL" - "альфа и омега", "библия" программистов баз данных.

Без ее прочтения - программист-базовик не является таковым даже с соответствующим дипломом - говорю как таковой с 10+ стажем

Зарядите поиск на http://ya.ru - найдете сотни ссылок на текст

:44:

вот за это спасибо.
сути:
решение вoзмoжнo через прoфили: ученик, учитель, aдминистрaтoр и т.д. Системa дoпускa через прoфили. Зaтем кaждый юзер привязaн к прoфилю. И вперед.

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

Код: Выделить всё

------------------------------------------

--
-- Table structure for table 'categories'
--

CREATE TABLE categories (
puple int(11) default NULL,
teacher int(11) default NULL,
administrator int(11) default NULL
) TYPE=MyISAM;

--
-- Dumping data for table 'categories'
--



--
-- Table structure for table 'grades'
--

CREATE TABLE grades (
grade varchar(4) NOT NULL default '',
teacher int(11) NOT NULL default '0',
comment text
) TYPE=MyISAM;

--
-- Dumping data for table 'grades'
--



--
-- Table structure for table 'marks'
--

CREATE TABLE marks (
mark char(3) NOT NULL default '',
science varchar(255) NOT NULL default '',
date date NOT NULL default '0000-00-00',
puple_id int(11) NOT NULL default '0',
teacher_id int(11) NOT NULL default '0',
viewed set('true','false') default 'false',
comment text
) TYPE=MyISAM;

--
-- Dumping data for table 'marks'
--

--
-- Table structure for table 'messages'
--

CREATE TABLE messages (
mess_id int(11) NOT NULL auto_increment,
from_id int(11) NOT NULL default '0',
to_id int(11) NOT NULL default '0',
body text NOT NULL,
date date NOT NULL default '0000-00-00',
viewed set('true','false') default 'false',
priority set('high','normal') default 'normal',
PRIMARY KEY (mess_id)
) TYPE=MyISAM;

--
-- Dumping data for table 'messages'
--



--
-- Table structure for table 'sciences'
--

CREATE TABLE sciences (
history int(11) default NULL,
sport int(11) default NULL,
english int(11) default NULL,
biology int(11) default NULL,
mathematics int(11) default NULL,
physics int(11) default NULL,
hebrew int(11) default NULL,
literature int(11) default NULL,
computers int(11) default NULL,
geography int(11) default NULL
) TYPE=MyISAM;

--
-- Dumping data for table 'sciences'
--


--
-- Table structure for table 'users'
--

CREATE TABLE users (
user_id int(11) NOT NULL auto_increment,
name varchar(200) NOT NULL default 'Anonymous',
login varchar(64) NOT NULL default '',
password varchar(64) NOT NULL default '',
category set('puple','teacher','administrator') NOT NULL default 'puple',
birth date NOT NULL default '0000-00-00',
post text,
comment text,
email varchar(255) default NULL,
PRIMARY KEY (user_id)
) TYPE=MyISAM;

--
-- Dumping data for table 'users'
--

во!


---------------------------------------------
такой вот расклад.....
Бest РegarДz

Аватара пользователя
andre6b
Участник со стажем
Сообщения: 239
Зарегистрирован(а): 14 июл 2002, 18:33

Сообщение andre6b » 26 авг 2002, 21:45

teardrop писал(а):вот вам дамп лист, разбирайтесь...

Код: Выделить всё

------------------------------------------

--
-- Table structure for table 'categories'
--

CREATE TABLE categories (
puple int(11) default NULL,
teacher int(11) default NULL,
administrator int(11) default NULL
) TYPE=MyISAM;

К чему бы это, если внизу есть такая замечательная таблица "юзерс"?

teardrop писал(а):

Код: Выделить всё

--
-- Dumping data for table 'categories'
--



--
-- Table structure for table 'grades'
--

CREATE TABLE grades (
grade varchar(4) NOT NULL default '',
teacher int(11) NOT NULL default '0',
comment text
) TYPE=MyISAM;

Какая разница между grades и marks с точки зрения аппликации?
teardrop писал(а):

Код: Выделить всё


--
-- Dumping data for table 'grades'
--



--
-- Table structure for table 'marks'
--

CREATE TABLE marks (
mark char(3) NOT NULL default '',
science varchar(255) NOT NULL default '',
date date NOT NULL default '0000-00-00',
puple_id int(11) NOT NULL default '0',
teacher_id int(11) NOT NULL default '0',
viewed set('true','false') default 'false',
comment text
) TYPE=MyISAM;

--
-- Dumping data for table 'marks'
--

--
-- Table structure for table 'messages'
--

CREATE TABLE messages (
mess_id int(11) NOT NULL auto_increment,
from_id int(11) NOT NULL default '0',
to_id int(11) NOT NULL default '0',
body text NOT NULL,
date date NOT NULL default '0000-00-00',
viewed set('true','false') default 'false',
priority set('high','normal') default 'normal',
PRIMARY KEY (mess_id)
) TYPE=MyISAM;

--
-- Dumping data for table 'messages'
--



--
-- Table structure for table 'sciences'
--

CREATE TABLE sciences (
history int(11) default NULL,
sport int(11) default NULL,
english int(11) default NULL,
biology int(11) default NULL,
mathematics int(11) default NULL,
physics int(11) default NULL,
hebrew int(11) default NULL,
literature int(11) default NULL,
computers int(11) default NULL,
geography int(11) default NULL
) TYPE=MyISAM;

А что если через месяц надо будет добавить еще курсы? Не лучше ли сделать отдельную таблицу курсов?

Код: Выделить всё

create table courses (
cid int PRIMARY KEY,
cname varchar(255) NOT NULL,
cdescription text
)

teardrop писал(а):

Код: Выделить всё


--
-- Dumping data for table 'sciences'
--


--
-- Table structure for table 'users'
--

CREATE TABLE users (
user_id int(11) NOT NULL auto_increment,
name varchar(200) NOT NULL default 'Anonymous',
login varchar(64) NOT NULL default '',
password varchar(64) NOT NULL default '',
category set('puple','teacher','administrator') NOT NULL default 'puple',
birth date NOT NULL default '0000-00-00',
post text,
comment text,
email varchar(255) default NULL,
PRIMARY KEY (user_id)
) TYPE=MyISAM;

--
-- Dumping data for table 'users'
--

во!


---------------------------------------------
такой вот расклад.....

Нужно отметить, что из-за того что MySQL не поддерживает FOREIGN KEYs, приходиться гадать каковы связи между таблицами.

Я бы не советовал пользоваться нестандартными фичерами БД типа "set" - при переносе на другую БД может создать проблемы.
Well...

Аватара пользователя
teardrop
Новый участник
Сообщения: 14
Зарегистрирован(а): 21 авг 2002, 19:25
Откуда: is ru
Контактная информация:

Сообщение teardrop » 26 авг 2002, 22:06

щас я все-все распишу, тогда будет понятней

CREATE TABLE categories (
puple int(11) default NULL,
teacher int(11) default NULL,
administrator int(11) default NULL
)


Категории пользователей, доступны 2 варианта использования
(т.к. при работе скрипта основной переменной будет user_id - идентификатор пользователя, используемый, как можно заметить во всех (почти) таблицах)
1. в качестве данных список ID-шников пользователей
2. -=- список доступных функций для каждой категории (произвольно придуманные имена)

СREATE TABLE grades (
grade varchar(4) NOT NULL default '',
teacher int(11) NOT NULL default '0',
comment text )


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

CREATE TABLE marks (
mark_id int not null auto_increment primary key,
mark char(3) NOT NULL default '',
science varchar(255) NOT NULL default '',
date date NOT NULL default '0000-00-00',
puple_id int(11) NOT NULL default '0',
teacher_id int(11) NOT NULL default '0',
viewed set('true','false') default 'false',
comment text
)


Оценки -
Id,
сама оценка,
предмет по которому выставлена оценка,
дата выставления,
Id ученика,
id учителя,
индикатор просмотра,
комментарий.

CREATE TABLE messages (
mess_id int(11) NOT NULL auto_increment,
from_id int(11) NOT NULL default '0',
to_id int(11) NOT NULL default '0',
body text NOT NULL,
date date NOT NULL default '0000-00-00',
viewed set('true','false') default 'false',
priority set('high','normal') default 'normal',
PRIMARY KEY (mess_id)
)


Сообщения:
id
откого_id
кому_id
текст
дата оправки
индикатор просмотра
важность

CREATE TABLE sciences (
history int(11) default NULL,
sport int(11) default NULL,
english int(11) default NULL,
biology int(11) default NULL,
mathematics int(11) default NULL,
physics int(11) default NULL,
hebrew int(11) default NULL,
literature int(11) default NULL,
computers int(11) default NULL,
geography int(11) default NULL
)


науки - список предметов, данные - id учителей, имеющих право выставлять/исправлять оценки по данному предмету


CREATE TABLE users (
user_id int(11) NOT NULL auto_increment,
name varchar(200) NOT NULL default 'Anonymous',
login varchar(64) NOT NULL default '',
password varchar(64) NOT NULL default '',
category set('puple','teacher','administrator') NOT NULL default 'puple',
birth date NOT NULL default '0000-00-00',
post text,
comment text,
email varchar(255) default NULL,
PRIMARY KEY (user_id)
)

тута ясно все, да?

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

да и добавлять предметы легко - alter table

Ну что скажете?
Бest РegarДz


Вернуться в «Наука и техника»




  Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 15 гостей