powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Проектирование базы данных
69 сообщений из 69, показаны все 3 страниц
Проектирование базы данных
    #38254455
scymaks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

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

При разговоре с заказчиками решили, что будет четыре типа пользователей:

Администратор, Методист, Учитель, Ученик.

Соответственно, Администратор может все.

Методист может работать только с учебным планом и общей успеваемостью.

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


Я решил пойти в лоб, так сказать, и сделал 5 таблиц: users (хранит идентификатор пользователя и ФИО), administrators(ссылается на users по первичному ключу user_id, который является и внешним, хранит дополнительную информацию какую-то об администраторах), methodists (аналогично связывается с таблицей users и хранит какие-то свои поля), teachers(та же история с users и снова свои поля) и, наконец, students(такая же связь с users и свои поля).


Теперь проблема сохранения данных о пользователях решена. Нужно теперь решить проблему с контролем доступа.
Не могу никак применить сюда RBAC на эту модель.

Наведите на мысль, пожалуйста.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38254537
Фотография skole
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В подобных случаях я создаю класс, например SecurityContext, где содержится вся инфа о данном пользователе, не только его роль, но и сделанные юзером настройки, думаю, реализация такого класса не составит для вас труда.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38254545
scymaksНаведите на мысль, пожалуйста.

1) Взять готовое решение отсюда http://obr.1c.ru/catalog.jsp?top=-1&type=2&aux=-1

2) Или попробовать готовое решение из п.1) тупо попытаться скопировать в свое "поделие", потерять год, так ничего и не сделать, в конечном счете вернуться на п.1
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38254552
users и user_type
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Одна таблица users, одно из полей которой ссылается на таблицу user_type, в которой записи: Администратор, Методист и т.д. и поля обозначающие наличие того или иного гранта.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38254554
Фотография skole
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1C? Какой ужас, эта компания еще не написали и строки кода, за которую ее уважать стоит. Вот действительно поделие-то.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38254661
scymaks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проясним ситуац,

я не разрабатываю столь крупную систему.

Вы перегибаете.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38254672
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
После входа пользователя сохраняй его права в глобальную переменную.
В дальнейшем проверяй в ней есть ли право на конкретную операцию.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38254920
rockclimber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scymaksЯ решил пойти в лоб, так сказать, и сделал 5 таблиц: users (хранит идентификатор пользователя и ФИО), administrators(ссылается на users по первичному ключу user_id, который является и внешним, хранит дополнительную информацию какую-то об администраторах), methodists (аналогично связывается с таблицей users и хранит какие-то свои поля), teachers(та же история с users и снова свои поля) и, наконец, students(такая же связь с users и свои поля).


Теперь проблема сохранения данных о пользователях решена. Проблема не решена. Проблема создана. А ваших заказчиков уже жалко

Пока не поздно, прислушайтесь к совету:
users и user_typeОдна таблица users, одно из полей которой ссылается на таблицу user_type, в которой записи: Администратор, Методист и т.д. и поля обозначающие наличие того или иного гранта.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38254993
scymaks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rockclimber,

как быть с тем, что скажем у пользователя студента нет логина, а у администртора на есть?
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255315
Фотография skole
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПосле входа пользователя сохраняй его права в глобальную переменную.
В дальнейшем проверяй в ней есть ли право на конкретную операцию.Неправильный подход
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255324
Фотография skole
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scymaks, ты плохо разобрался с абстрактными сущностями приложения, пользователи, администраторы, методисты и пр., это все одна сущность - юзеры, их роли - другая, и третья - UserRoles - там ты будешь хранить роли пользователей.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255701
scymaks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skole,

Я себе понимаю это так:

Есть users (любой тип юзеров имеет запись здесь)
| - > administrators (содержит поля, специфичные для администраторов)
| - > teachers (содержит поля, специфичные для учителей)
| - > students (содержит поля, специфичные для студентов)

Есть таблица roles (хранит определение ролей)
| - > ADMINISTRATOR_ROLE (роль администратора)
| - > TEACHER_ROLE (роль учителя)
| - > STUDENT_ROLE (роль ученика)

Есть таблица users_to_roles (хранит связь пользователей с ролями)
(id, user_id, role_id)

Я что-то не так понимаю?
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255758
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scymaksЯ что-то не так понимаю? http://ru.wikipedia.org/wiki/Вторая_нормальная_форма
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255773
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С одной стороны все так. Схема которую ты предлагаешь - будет работать. Но она перегружена. В твоем случае хватит и пяти таблиц:
Список пользователей с общей информацией (типа полного имени, пароля, и тп) и четыре ролевых таблицы: список администраторов, методистов, учителей и учеников. При этом отдельной таблицы с ролями и таблицы соответствий пользователь-роль не нужны.


Обычно хватает трех таблиц:
- список пользователей
- список возможных ролей
- список соответствий пользователь-роль
Плюс этой схемы по сравнению с много-табличной - можно легко создавать новые роли (просто добавить строку в список ролей и все). А в случае роль-таблица - надо будет создавать новую таблицу.
Но собственно функциональных отличий между традиционной схемой и твоей нет. Если тебя не смущает что в будущем для ролей "директор" или "завуч" придется создавать новые таблицы, а для удаления ненужных ролей удалять таблицы.... то вперед.

Ни у традиционалисты будут тебя материть за изобретение велосипеда.


Решение с одной таблицей - список пользователей с флагами принадлежности к ролям (как предлагал некто безымянный 14284940 ) тоже может существовать. Оно чуть проще, но по существу не отличается от твоего. В этой схеме список ролей жестко задан изначально и если понадобиться добавить новую роль или убрать старую - надо будет менять таблицу.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255777
scymaks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman,

ну а где я ее нарушаю?
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255796
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scymaksскажем у пользователя студента нет логина, а у администртора на есть?Если пишется БД - то у любого пользователя есть логин. Хотя бы - Guest. И нужно просто понимать, что "пустой" логин (даже если вы додумаетесь использовать такое) - это тоже информация...


Далее, по предыдущему посту:

Если вы действительно желаете иметь всяких там методистов и преподавателей, а права привязывать именно к типу пользователя, то строим примерно так:

Есть таблица Users (здесь прописаны все пользователи), в ней поля
id
name
..другие поля

Есть таблица Types (здесь прописаны возможные типы пользователей (Методист и т.п.), они же в вашем понимании - "роли"), в ней поля
id
name
..другие поля

Есть таблица UsersTypes (здесь прописаны роли конкретных пользователей - зачем? затем, что один пользователь может иметь и несколько ролей), в ней поля
idUser (<->Users.Id)
idType (<->Types.Id)

Есть таблица Rights (здесь прописаны права на действия в программе),
id
name
..другие поля

Есть таблица RightsTypes (здесь прописаны соответствия между типами (ролями) и правами пользователей), в ней поля
idUserType (<-> UserTypes.Id)
idRight (<-> Rights.Id)

Когда вы создаете/модифицируете пользователя - вы прописываете его самого в Users, а его возможные "роли" - в UsersTypes. Когда вы создаете/модифицируете "роль" - вы прописываете её тип в Types, а "права" - в RightsTypes. А таблица Rights - это внутренняя таблица самой базы, она создается и модифицируется разработчиком (который и продумывает межанизм реализации прав доступа). А слова "Администратор", "Методист" и т.д. - это просто текстовые строки в поле UserTypes.Name...

Где-то так, для начала...
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255802
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlЕсли тебя не смущает что в будущем для ролей "директор" или "завуч" придется создавать новые таблицы, а для удаления ненужных ролей удалять таблицы.... то вперед.

Ни у традиционалисты будут тебя материть за изобретение велосипеда.Пока набирал - пропустил пост
И да будем материть - ибо в этом случае Оккам своим серпом по одному месту... ну вы поняли...
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255829
rockclimber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scymaksrockclimber,

как быть с тем, что скажем у пользователя студента нет логина, а у администртора на есть?А в чем проблема? Проблема будет, когда заказчик полгода спустя скажет - а давайте сделаем логины студентам, пусть расписание сами узнают! И вы еще раз сделаете то, что уже делали по отдельности для администраторов, методистов и учителей.
Вместо того, чтобы сделать один раз для всех и забыть.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255837
Фотография skole
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTM, ++
Только правила доступа здесь не нужны, это делается на уровне приложения, то есть по умолчанию доступа нет ни у кого, но на уровне приложения открываешь доступ для админа - удалять, для методиста редактировать.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255845
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scymaksну а где я ее нарушаю? Нарушений нет. Есть небольшая избыточность.
Можно сократить до двух таблиц:

Модератор: Вложение удалено.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255850
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обновил
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255851
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255852
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rockclimberscymaksrockclimber,

как быть с тем, что скажем у пользователя студента нет логина, а у администртора на есть?А в чем проблема? Проблема будет, когда заказчик полгода спустя скажет - а давайте сделаем логины студентам, пусть расписание сами узнают! И вы еще раз сделаете то, что уже делали по отдельности для администраторов, методистов и учителей.
Вместо того, чтобы сделать один раз для всех и забыть.Вы оба путаете наличие логинов с обязательностью паролей.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255857
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skoleAndreTM, ++
Только правила доступа здесь не нужны, это делается на уровне приложения, то есть по умолчанию доступа нет ни у кого, но на уровне приложения открываешь доступ для админа - удалять, для методиста редактировать.Вот за это "на уровне приложения" - убивать на месте.
У Васи версия клиента номер 1, он может будучи учеником может править урок. Ну баг там был в приложении. Ты обнаружил баг, исправил его и выпустил версию приложения номер 2. Счастье? А фиг! Вася зная о баге не стал обновлять свое приложение и спокойно правит уроки.
А директор школы сказал: "а почему это методист не может создавать уроки? Дайте ему доступ" и начнешь ты опять править приложение а потом распространять его...
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255859
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UsmanОбновилВроде-бы, кто-то, не так давно, намекал что TC нарушает принципы нормализации.
Не помнишь кто это был?
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255864
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scymaksЯ создаю небольшую программку, которая будет использоваться в частных школах.Кстати, уточни пожалуйста, какой СУБД ты пользуешься и пользуешься ли вообще какой-нибудь?
Просто у большинства много-пользовательских СУБД уже есть готовые (системные) таблицы пользователей и системы ролей и/или групп. И твоя начальная задача решается не создаваемым таблицами а простым использованием имеющихся средств.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255875
rockclimber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skoleAndreTM, ++
Только правила доступа здесь не нужны, это делается на уровне приложения, то есть по умолчанию доступа нет ни у кого, но на уровне приложения открываешь доступ для админа - удалять, для методиста редактировать."Логика на клиенте" vs "логика в БД" - это уже совсем другой холивар
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255878
Фотография skole
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlskoleAndreTM, ++
Только правила доступа здесь не нужны, это делается на уровне приложения, то есть по умолчанию доступа нет ни у кого, но на уровне приложения открываешь доступ для админа - удалять, для методиста редактировать.Вот за это "на уровне приложения" - убивать на месте.
У Васи версия клиента номер 1, он может будучи учеником может править урок. Ну баг там был в приложении. Ты обнаружил баг, исправил его и выпустил версию приложения номер 2. Счастье? А фиг! Вася зная о баге не стал обновлять свое приложение и спокойно правит уроки.
А директор школы сказал: "а почему это методист не может создавать уроки? Дайте ему доступ" и начнешь ты опять править приложение а потом распространять его...Вообще то это best practice
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255881
Фотография skole
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rockclimberskoleAndreTM, ++
Только правила доступа здесь не нужны, это делается на уровне приложения, то есть по умолчанию доступа нет ни у кого, но на уровне приложения открываешь доступ для админа - удалять, для методиста редактировать."Логика на клиенте" vs "логика в БД" - это уже совсем другой холивар Это не логика, это интерфейс, который ты проводишь сквозь все приложение.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255884
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlВот за это "на уровне приложения" - убивать на месте.Я, наверное, выразился как видел. Skole - как видел он. А говорим мы о разном.
Я хотел сказать, что привязки "роль-права" доступны в приложении. И "ученик<+/->модификация урока" - это связка в RightsTypes . На уровне приложения. А вот запись в Rights "модификация урока" <=> "GRANT/REVOKE INSERT,UPDATE,DELETE ON TABLE lessons TO ..." и будет на совести разработчика...
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255936
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTMWhite OwlВот за это "на уровне приложения" - убивать на месте.Я, наверное, выразился как видел. Skole - как видел он. А говорим мы о разном.О разном?
Ну вот я говорю о том что:
Вариант 1) Права пользователя жестко завязаны на его роль. Тогда таблица Rights не нужна вообще и приложение узнав к какой роли пользователь принадлежит включает/выключает доступ до определенного модуля.
Вариант 2) Роль это глобальное понятие, например Учитель. Но учитель биологии не может править уроки по физике и наоборот, тогда нужно вводить "вторичная роль" и доступ до модуля "учитель" для МарьВанны выдается по ее роли, а потом гранулируется второй раз при помощи таблицы rights и выдается доступ до классов соответствующего типа.
В обоих вариантах доступ разграничивается на сервере.

А skole предлагает:
skoleТолько правила доступа здесь не нужны, это делается на уровне приложения, то есть по умолчанию доступа нет ни у кого, но на уровне приложения открываешь доступ для админа - удалять, для методиста редактировать.
То есть по его мнению, если читать дословно, то получается что пользователь приходит в базу данных и не может ничего сделать на уровне СУБД. Потом в приложении отрабатывает некая волшебная функция которая разрешает этому конкретному пользователю что-то делать. В итоге получаем нечто теоретически невозможное.

Предположим что skole описался и он имел в виду что пользователь может делать все что угодно на уровне СУБД, но приложение прочитав роль пользователя и узнав что это роль с ограниченными правами выключает доступ до определенных модулей. (Это уже вполне реальная ситуация и я ее видел в живую неоднократно.) Но тогда, смотри мой предыдущий ответ для skola. Это абсолютно незащищенное от злоумышленников решение, и оно чрезвычайно шатко когда дело касается целостности данных.
В случае если СУБД без-юзерного типа (FoxPro, SQLite, etc), то это единственно возможное решение и тогда действительно будет нужна таблица users и ручное придумывание системы разграничения прав доступа. Опасно и ненадежно, но увы без вариантов.
Но если СУБД имеет встроенную систему распознавания пользователя (MS SQL, Oracle, MySQL, etc) то надо ею воспользоваться и пользователь пришедший в СУБД будет иметь частичные права (по его роли) не смотря на клиента. В этом случае делать права доступа на уровне приложения - лишняя работа. А если на такой СУБД давать права изначально на все, а потом делать правила доступа на уровне клиента, то это повод оторвать разработчику руки по самые гланды.

AndreTMЯ хотел сказать, что привязки "роль-права" доступны в приложении. И "ученик<+/->модификация урока" - это связка в RightsTypes . На уровне приложения. А вот запись в Rights "модификация урока" <=> "GRANT/REVOKE INSERT,UPDATE,DELETE ON TABLE lessons TO ..." и будет на совести разработчика...А при чем здесь разработчик? Это работа для Администратора а не разработчика. В модуле Администратора будет кнопка "дать/отнять роль учителя" и по ее нажатии будет запускаться эта команда. И все собственно. Вот если TC будет делать разграничение по типу уроков (биология-физика-рисование), то тогда надо будет делать еще и запись в Rights с указанием какие именно строки из lessons можно править этому пользователю.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255948
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl, ну, я примерно это и имел в виду...
А то ТС что-то изначально не упомянул о наличии в его СУБД встроенных средств контроля доступа...
И про Оккама я тоже вроде уже...
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255971
Фотография skole
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Внесем ясность, пользователь приложения не есть пользователь БД.

Далее, как реализуется такой функционал? Я уже вначале упомянул, что для этого создается класс, например UserContext, который реализует интерфейс IUserContext.

На входе пользователя мы загружаем этот класс данными из БД, настроек приложения, конфигурационных файлов, словом состав класса и структура интерфейса дело воображения.

Предположим наш пользователь производит какие-то действия, открывает форму например, тогда мы передаем в форму его UserContext, немного псевдокода:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
public class MainForm:Form
{
    UserContext _userContext;

public MainForm(IUserContext userContext)
{
     InitializeComponents();
     _userContext= userContext;
}

private void MainForm_Load(object sender, EventArgs e)
{
     if(userContext.Role == Role.Administrators)
     {
        btnDelete.Enabled = true:
     }

      if(userContext.Role == Role.Editors)
     {
        btnEdit.Enabled = true:
     }
}


Это разумеется примитивное использование такого функционала разграничения доступа пользователей по ролям, но механизм четко выражен. Надеюсь, моя мысль понятна.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255980
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skoleВнесем ясность, пользователь приложения не есть пользователь БД.Все, дальше можно не читать.
Пользователь приложения не будет пользователем БД только в одном единственном случае - абсолютном отсутствии БД.
В общем: "В школу!"
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38255990
Фотография skole
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты что, на каждого пользователя создаешь учетку в БД? Забавно конечно, но в этом смысла нет, для приложения достаточно одной учетки, чтобы инкапсулировать всех пользователей приложения, иначе, зачем весь этот функционал.

Кроме того, пользователи приложения ничего не знают об учетке (и правах) приложения в БД, им это и не нужно, любое приложение на соответствующем уровне представляет абстракцию для работы в БД.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38256031
rockclimber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skoleТы что, на каждого пользователя создаешь учетку в БД? Забавно конечно, но в этом смысла нет, для приложения достаточно одной учетки, чтобы инкапсулировать всех пользователей приложения, иначе, зачем весь этот функционал.Действительно, зачем брать готовый функционал для аутентификации и хранения паролей, который есть в любой БД? Мы нарисуем свой, с блекждеком и шлюхами!
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38256032
rockclimber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rockclimberкоторый есть в любой БД?СУБД конечно, но сути это не меняет.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38256111
scymaks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rockclimber,

Сейчас занят, вечером отпишусь подробно о всем что здесь прочитал.

Я использую PostgreSQL, но не хотелось бы использовать каких-то слишком уж нативных средств. Потому как в будущем возможна миграция на Oracle или что-то еще (не по моей воле).
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38256112
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rockclimberДействительно, зачем брать готовый функционал для аутентификации и хранения паролей, который есть в любой БД? Мы нарисуем свой, с блекждеком и шлюхами!
Для поделок на коленке или маленьких декстопных систем без развития (в чем сомневаюсь) - управление учетками и правами доступа на уровне БД - будет достаточно. Как только
* система начинает расти, в ней появляются бизнес-функции (это помимо сущностей - ака таблицы БД), на которые так же есть права доступа
* или систему необходимо выложить в инет (т.е. засветить логины/пароли к базе в инете)
начинаются проблемы и костыли и большие фундаментальные переделки

насчет бизнес-функции - да можно в хранимки запихнуть бизнес-логику и опять через базу рулить правами, что не всегда есть хорошо - на ООП ЯП можно эффективней сделать то, чего нельзя сделать на SQL и наоборот и плюс логика может размазаться в двух местах с дублированием кода

в представленном ТС случае, я бы сделал так:
1. таблица пользователей, у пользователя одна роль
2. таблица ролей (Администратор, Методист, Учитель, Ученик)
3. таблица роль-право_доступа (RoleId int, PermissionId int)
причем PermissionId - это код права доступа, его сделать перечнем (enum) в используемом ООП ЯП
4. так как ученикам не нужен логин/пароль - тупо их не заводить в системе, они будут иметь доступ только в публичную часть
5. когда пользователь авторизуется - необходимо хранить текущего пользователя и его роли/права в неком едином месте (зависит от используемой платформы и ЯП)
6. когда пользователь заходит в некую бизнес-функцию - написать метод, который будет проверять право доступа на эту функцию
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38256120
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scymaksЯ использую PostgreSQL, но не хотелось бы использовать каких-то слишком уж нативных средств. Потому как в будущем возможна миграция на Oracle или что-то еще (не по моей воле).
вот, еще одна причина, по которой не следует писать бизнес-логику в хранимках
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38256139
rockclimber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
17-77,

я уже сказал и повторюсь еще раз: это просто холивар, бессмысленный и беспощадный. Если вы не умеете делать это на SQL (PL/SQL. TSQL ...), но умеете на java - делайте на java, вам никто не запрещает. Но только не надо говорить, что только ваш путь правильный, а остальные ведут в тупик. Управление правами - слишком простая вещь, чтобы у нее были принципиальные ограничения на способ реализации.

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


scymaksrockclimber,

Сейчас занят, вечером отпишусь подробно о всем что здесь прочитал.

Я использую PostgreSQL, но не хотелось бы использовать каких-то слишком уж нативных средств. Потому как в будущем возможна миграция на Oracle или что-то еще (не по моей воле).Вам под вашу задачу идеально подходит Oracle APEX (попробовать и потренироваться на кошках можно тут - жмакайте на кнопочку "Request free workspace"). По сути, тот же аксесс, только на Оракле, бесплатно (!!!), с веб-интерфейсом и с кучей готовых шаблонов "как реализовать разграничения прав доступа" (как на уровне БД, так и на уровне приложения).
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38256163
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rockclimber,
ага, холивар
ограничения я написал уже, про эффективность решения задач на том или ином ЯП
система прав доступа работает совместно с остальными частями системы

rockclimberЕсли же вы сталкивались с тем, что на уровне БД не получается реализовать какую-то хитровывернутую систему управления правами - пример в студию, посмеемся посмотрим.
я не использую подход разграничения прав доступа на уровне БД, а насчет примера - я уже говорил, что права есть к сущностям (таблицам БД) и к бизнес-функциям, которых в БД может и не быть
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38256211
Фотография AlexandrPlus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scymaks,

так и делать на RBAC

к чему хренатень-то с 4-мя таблицами? роли реализует стандартный софт СУБД

всех юзеров в одно и потом им раздавать роли (кто-то может быть в двух и более ролях), менять роли

ИС делать надо (основу хотя бы), а роли потом уж
PS Либо надо сразу полноценный проект в какой-нибудь системе спецификаций и управления требованиями, где и роли будут.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38257204
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rockclimberя уже сказал и повторюсь еще раз: это просто холивар, бессмысленный и беспощадный.Неправда. Это не холивор, а нашествие молодежи работавшей на одном-двух микро-проектах и не имеющих реального опыта.
Не сталкивались они с кретинами юзерами узнавшими логин-пароль под которым ходит в базу приложение и попытавшимися "подправить" базу напрямую. Не видели как стажер делает дамп базы и продает ее конкурентам, а большие боссы почему-то очень сердятся.
Не встречались наши носители розовых очков с нуждой иметь два-три разных клиента к базе данных... Вынос бизнес-логики на приложение в этом случае превращается в настоящий рай для энтомологов и психиатров.
Не было у них в жизни розысков "какая сволочь платежку исправила?!"...
Юность это счастье.

scymaksЯ использую PostgreSQL, но не хотелось бы использовать каких-то слишком уж нативных средств. Потому как в будущем возможна миграция на Oracle или что-то еще (не по моей воле).Не обязательно использовать нативные средства через нативный синтаксис. Вполне можно ходить к базе через ODBC/ADO и делать всю работу через универсальные интерфейсы. Они спрячут почти все нативность внутрь драйверов и потом можно будет просто перенаправить DNS на другую базу и все. Переделки в этом случае все равно будут, но минимальные.

Ну и в конце-концов, если заказчик хочет Оракл (и готов его купить) - можно взять бесплатную GA редакцию и разрабатывать свой проект на ней. Практически все современные СУБД имеют сейчас бесплатные редакции предназначенные для разработки пилотных версий и/или студенческих игрищь.
Но я очень советую заранее определиться с СУБД и писать сразу на ней. Даже если ты специально будешь ограничивать себя диалектом SQL-92 - все равно рано или поздно столкнешься с необходимостью сделать кое-что нативно.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38257323
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owlrockclimberя уже сказал и повторюсь еще раз: это просто холивар, бессмысленный и беспощадный.Неправда. Это не холивор, а нашествие молодежи работавшей на одном-двух микро-проектах и не имеющих реального опыта.
Не сталкивались они с кретинами юзерами узнавшими логин-пароль под которым ходит в базу приложение и попытавшимися "подправить" базу напрямую. Не видели как стажер делает дамп базы и продает ее конкурентам, а большие боссы почему-то очень сердятся.
Все должно развиваться эвалюционно. Образный пример: если на запорожец приладить колеса от вездехода, то вездеходом он не станет. Станет чуть-чуть проходимее, но не вездеходом.
Это я к тому что один правильный кусок программы не спасет ее от взлома, просто чуть-чуть его усложнит.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38257366
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TВсе должно развиваться эвалюционно. Образный пример: если на запорожец приладить колеса от вездехода, то вездеходом он не станет. Станет чуть-чуть проходимее, но не вездеходом.
Это я к тому что один правильный кусок программы не спасет ее от взлома, просто чуть-чуть его усложнит.Видишь ли, дизайн систем это не запорожец. Дизайн систем это ответ на вопрос "есть у запорожца мотор и колеса или нету". Сейчас на запорожец можно в принципе поставить колеса от вездехода, но гусеницы или пропеллер к нему не приладить никак. Для таких переделок эволюции мало, для них полный ре-дизайн нужен. А если ты изначально хотел получить вертолет, но сделал запорожец тебе никакая эволюция уже не поможет.
Так и здесь. Если изначально пойти по пути наименьшего сопротивления и сделать секьюрити и бизнес-логику на уровне приложения, то потом тебе придется делать полный рефакторинг и клиента и сервера чтобы перенести их на сервер.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38257491
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну да, ну да... Действительно, прослеживается, что ТС начал разработку БД как для файл-сервера. Без понимания, что в клиент-серверной СУБД клиенту всё равно не обломится из базы больше информации, чем предусмотрено правами при коннекте.
Видимо, думает, что если guest в клиентском интерфейсе жмакнет "удалить урок" - то СУБД сразу его и послушается Хотя, если сделать коннекты, как предлагали здесь некоторые - то так и будет
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38261540
scymaks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rockclimberscymaksrockclimber,

как быть с тем, что скажем у пользователя студента нет логина, а у администртора на есть?А в чем проблема? Проблема будет, когда заказчик полгода спустя скажет - а давайте сделаем логины студентам, пусть расписание сами узнают! И вы еще раз сделаете то, что уже делали по отдельности для администраторов, методистов и учителей.
Вместо того, чтобы сделать один раз для всех и забыть.

Ну при моем подходе были бы логины у студентов тоже. Если бы требовалось чтобы все пользователи имели бы доступ через логин, то он был бы вынесен в таблицу users
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38261543
scymaks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,

Схема разрабатывается для web приложения. Так что актуальная версия всегда будет у всех.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38275667
Dmitry Eliseev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне вот интересно, а как быть (в случае когда доступом рулит БД), если требуется доступ только к определённым записям в таблице, а не ко всей таблице ? Например, чтобы пользователь 1 мог удалять только свои записи, просматривать записи пользователя 2, но не видел записей пользователя 3 и 4 ?
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38275684
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry EliseevМне вот интересно, а как быть (в случае когда доступом рулит БД), если требуется доступ только к определённым записям в таблице, а не ко всей таблице ? Например, чтобы пользователь 1 мог удалять только свои записи, просматривать записи пользователя 2, но не видел записей пользователя 3 и 4 ?А это зависит от СУБД.
У большинства для этого есть специальные модули, которые стоят специальные деньги.

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

Другой вариант: делаешь view (обновляемый если нужно) и в нем уже даешь доступ к определенной записи для юзера по нужным правилам и заставляешь всех юзеров работать с этими представлениями (просто отбираешь доступ к таблице, разрешаешь к представлению).
Собственно говоря, "решения из коробки", те самые дополнительные модули для СУБД, именно так и делают. Но они не создают отдельное представление, а подменяют обращение к реальной таблице на обращение к виртуальному представлению. Ты определяешь правила доступа к записи, а сервер уже будет на каждое обращение к записи проверять этот набор правил.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38275697
Dmitry Eliseev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Интересный вариант :). Особенно если пользователей не один десяток. Представляю себе размер хранимых процедур. А как наверное весело реализовывать динамическую раздачу прав. Чтобы админ (роль приложения, а не СУБД) мог самостоятельно разруливать какие действия и с какими записями какой пользователь мог осуществлять.

А уж вести логирование бизнес дейстивий... видимо тоже с помощью хранимых процедур ?
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38275699
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry EliseevИнтересный вариант :). Особенно если пользователей не один десяток. Представляю себе размер хранимых процедур. А как наверное весело реализовывать динамическую раздачу прав. Чтобы админ (роль приложения, а не СУБД) мог самостоятельно разруливать какие действия и с какими записями какой пользователь мог осуществлять.Не вижу проблем.
Каждая запись имеет "признак принадлежности". Это может быть и имя юзера (если доступ надо делать персонализированным) или код отдела/филиала/группы/итп.
А потом просто
Код: sql
1.
2.
select/update/delete from table DataTable
where owner=user_name()


или
Код: sql
1.
2.
select/update/delete from table DataTable
where department in (select department from UserDepartment where user=user_name())


И все.

Dmitry EliseevА уж вести логирование бизнес дейстивий... видимо тоже с помощью хранимых процедур ?Ну а это то какие сложности у тебя вызывает? Триггера в школе не проходили?
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38275712
Dmitry Eliseev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot White Owl]Dmitry Eliseev А как наверное весело реализовывать динамическую раздачу прав. Чтобы админ (роль приложения, а не СУБД) мог самостоятельно разруливать какие действия и с какими записями какой пользователь мог осуществлять.

Dmitry EliseevА уж вести логирование бизнес дейстивий... видимо тоже с помощью хранимых процедур ?Ну а это то какие сложности у тебя вызывает? Триггера в школе не проходили?
Проходили конечно, только хочется чтобы в логе было записано:

Код: sql
1.
2013.05.28.01.00.32 Иванов Иван Иванович удалил информацию о расписании "Новое" 

, а не сотню строк типа
Код: sql
1.
2.
3.
2013.05.28.01.00.32 Пользователь 1, schedule_items, delete, id = 1
...
2013.05.28.01.00.32 Пользователь 1, schedule_items, delete, id = 1


потом такие же действия со связанными таблицами, и наконец:
Код: sql
1.
2013.05.28.01.00.32 Пользователь 1, schedules, delete, id = 1
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38275743
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Dmitry Eliseev]White Owlпропущено...

Проходили конечно, только хочется чтобы в логе было записано:

Код: sql
1.
2013.05.28.01.00.32 Иванов Иван Иванович удалил информацию о расписании "Новое" 

, а не сотню строк типа
Код: sql
1.
2.
3.
2013.05.28.01.00.32 Пользователь 1, schedule_items, delete, id = 1
...
2013.05.28.01.00.32 Пользователь 1, schedule_items, delete, id = 1


потом такие же действия со связанными таблицами, и наконец:
Код: sql
1.
2013.05.28.01.00.32 Пользователь 1, schedules, delete, id = 1


Ну во первых, лично я за такие текстовые логи увольняю на месте. Подобные текстовые записи в логах удобны только на первый взгляд. Но если тебе понадобиться узнать что происходило с расписанием "Новое". Тебе придется заниматься извращенным сексом с регулярными выражениями и при этом без уверенности в успехе.
Когда люди делают текстовые логи, они не склонны придерживаться шаблонов, зато склонны соблюдать грамматику. И в итоге получается:
- расписание Новое создала Света
- Изменение в расписании <<Новое>> сдал Боря
- Иванов Иван Иванович удалил информацию о расписании "Новое"
А через год попытайся собрать историю этого расписания и ты скорее свихнешься чем добьешься успеха.

А во вторых, запись с полями типа (user_id, type_of_items, action_code, item_id) всегда можно будет расшифровать в текст любого из форматов которые я уже показал, и в тысячи других форматов которые ты можешь придумать.

И в третьих, ну и какие сложности ты видишь чтобы создать текст "Иванов Иван Иванович удалил информацию о расписании "Новое" " из триггера или хранимой процедуры?
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38275796
rockclimber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry EliseevПредставляю себе размер хранимых процедур. А как наверное весело реализовывать динамическую раздачу прав. Чтобы админ (роль приложения, а не СУБД) мог самостоятельно разруливать какие действия и с какими записями какой пользователь мог осуществлять.1 SQL-запрос и три таблицы. И, между прочим, на первой странице топика все это уже описано.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38275946
Dmitry Eliseev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Неважно в текстовый лог идёт запись или в лог со специфическим форматом. На основной вопрос так и нет ответа. Как сделать логирование БИЗНЕС процесса, когда этот процесс меняет содержимое нескольких таблиц (от трёх до десяти). Куда вешать триггер?

rockclimberDmitry EliseevПредставляю себе размер хранимых процедур. А как наверное весело реализовывать динамическую раздачу прав. Чтобы админ (роль приложения, а не СУБД) мог самостоятельно разруливать какие действия и с какими записями какой пользователь мог осуществлять.1 SQL-запрос и три таблицы. И, между прочим, на первой странице топика все это уже описано.
Там описано для случая, когда пользователями/правами/ролями управляют на уровне приложения. Мне интересно как это сделать на уровне СУБД.

Кстати, использование хранимых процедур ничем не отличается от написание того же кода в приложении. Т.е. фактически только место исполнения кода разное. В пользу кода в приложении говорит переносимость между СУБД.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38276382
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry EliseevНеважно в текстовый лог идёт запись или в лог со специфическим форматом. На основной вопрос так и нет ответа. Как сделать логирование БИЗНЕС процесса, когда этот процесс меняет содержимое нескольких таблиц (от трёх до десяти). Куда вешать триггер?Хотите самостоятельно логировать изменения в каждой отдельной таблице? Тогда на каждую из логируемых таблиц создаете триггер и "парную" ей таблицу для логирования изменений. Разворачивание таблиц-логов для "разбора полетов" - отдельная, достаточно "веселая" задача...
Dmitry Eliseevrockclimberпропущено...
1 SQL-запрос и три таблицы. И, между прочим, на первой странице топика все это уже описано.
Там описано для случая, когда пользователями/правами/ролями управляют на уровне приложения. Мне интересно как это сделать на уровне СУБД.Принцип тот же самый. Только в одном случае это нужно делать "ручками", а в другом случае - фича базы данных.
Например, в Oracle это что-то типа "fine-grained access control" или "virtual private database". В общих чертах там это работает как прозрачное (и невидимое) для пользователя включение дополнительного условия фильтрации (с учетом пользователя и его ограничений) в любую DML-команду.
Dmitry EliseevКстати, использование хранимых процедур ничем не отличается от написание того же кода в приложении. Т.е. фактически только место исполнения кода разное. В пользу кода в приложении говорит переносимость между СУБД.Переносимость между разными СУБД актуальна только когда стоимость переноса равна нулю - а такого не бывает даже при переезде между разными "бесплатными" СУБД.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38277154
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry EliseevВ пользу кода в приложении говорит переносимость между СУБД.Переносимость между СУБД? Ха-ха-ха.
Это все сказки и фантазии людей ни разу не выходивших за рамки студенческих курсовых.
В реальности, если ты решишься переходить с одной СУБД на другую, то только по причине гигантской разницы между СУБД. Вот с FoxPro/Clipper на какую-нибудь SQL-based СУБД переходят запросто (при этом полностью все переписывая естественно). Это экономически оправданно. Переход между разными SQL-based DBMS экономически не оправдан почти никогда.


Переход с одной базы на другую (с MySQL на Oracle) я в жизни видел всего один раз. У несчестной конторы сменился начальник который очень любил ораклятину и ему было плевать на затраты. Переход шел около двух лет и за это время контора практически полностью потеряла всех своих контрагентов (в том числе и нас) потому что нам тоже пришлось выкидывать весь наработанный софт которым мы общались с ними и писать его заново. А для этого уже нам пришлось бы нанимать ораклистов. Мы подумали, поприкидывали и ушли от той конторы к ее конкурентам. Те обещали более удобное API для своих баз и большие скидки на услуги.
Сейчас несчастные вроде-бы снова поднимаются, но почти четыре года они сидели в глубокой экономической яме. Старые клиенты на них плевались, а новые косились. А все потому что Большому Боссу не нравилась "бесплатность" используемой СУБД.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38279369
Dmitry Eliseev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Перенос между разными SQL-ными СУБД вполне возможен и по экономическим причинам. Например с Oracle, на PostgresQL, чтобы продать решение без навязывания покупки Оракла, или исходя из удобства/неудобства использования диалекта SQL.

Весьма распространена ситуация когда у заказчика используется Oracle, разработчику удобнее использовать Postgres, а тесты гоняются на H2. При этом liquibase обеспечивает единство баз под всеми этими платформами.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38279527
rockclimber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry EliseevПеренос между разными SQL-ными СУБД вполне возможен и по экономическим причинам.Я такое только про "коробки" слышал - про продукцию 1С и Atlassian (Jira, Confluence и пр.) например. Еще ЦФТ пыжится что-то такое родить, но, судя по слухам, есть большой шанс, что надорвется... Во всех остальных случаях без живых цифр на руках или известных примеров лучше даже не заикайтесь про это.
Даже просто переход на следующую версию той же СУБД не всегда гладко проходит (опять же, видел краем глаза, как ЦФТшную АБС готовили к переходу с 9-го оракла на 11-й - процесс планировали чуть ли не за год), многие до сих пор сидят на 9-м или 10-м оракле, хотя уже 12 скоро выйдет, а вы сразу на другую СУБД перескочить хотите.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38279856
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry EliseevПеренос между разными SQL-ными СУБД вполне возможен и по экономическим причинам. Например с Oracle, на PostgresQL, чтобы продать решение без навязывания покупки Оракла, или исходя из удобства/неудобства использования диалекта SQL.Приводить "экономические причины" не серьезно - аргумент "для очень бедных". В действительно серьезных проектах стоимость лицензий никогда не составляет сколь-либо значимую долю расходов. Получается, типа, "мы тут замутили проЭкт на 100500 мульенов денег, но купить лицензионный софт нам капусты не хватает"...
И не забываем, что ни один "бесплатный продукт" никогда не был бесплатным в обслуживании - вплоть до того, что обслуживание (иногда) обходится гораздо дороже, чем для "платных"...

Ну, а "удобство/неудобство диалекта SQL" - вообще смешно...
Dmitry EliseevВесьма распространена ситуация когда у заказчика используется Oracle , разработчику удобнее использовать Postgres , а тесты гоняются на H2 . При этом liquibase обеспечивает единство баз под всеми этими платформами.Вы лучше расскажите (потенциальным заказчикам), ГДЕ практикуется подход разработки с ТАКИМ "зоопарком" - сугубо "во избежание"...

Заодно попытайтесь озвучить аргументы, по которым разработку (в частности, под Oracle) нужно (и возможно) использовать совершенно "перпендикулярные" средства...

Очень надеюсь, что Вы (хотя бы теоретически) подозреваете, что при "зоопарк-подходе" Вы НИКОГДА не сможете использовать сколь-нибудь значимую часть реальных возможностей целевой платформы заказчика. Для SQL-серверов это (в лучшем случае) будет ограничено "базовыми" SQL-командами (select/insert/update/delete) c крайне упрощенным синтаксисом.
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38280566
Dmitry Eliseev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
смешно, когда у СУБД нет автоинкрементных полей и типа TIME, так смешно, что плакать хочется...
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38280625
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Eliseevсмешно, когда у СУБД нет автоинкрементных полей и типа TIME, так смешно, что плакать хочется...И это - все претензии?! Ну, что тут сказать... Поплачьте...

Уж сколько работаю с разными СУБД, но какой-то принципиальной необходимости в типе данных TIME ни разу не испытывал - это при том, что последние несколько лет работаю в разработках для телекома...

И мне ОЧЕНЬ хочется посмотреть, как Вы свой проект, который вели на платформе, где есть и автоинкреммент, и TIME перенесете туда, где "в-лоб" такого не наблюдается физически... Особенно - если Вы на них "насмерть" завязаны...
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38280794
rockclimber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Eliseevсмешно, когда у СУБД нет автоинкрементных полей и типа TIME, так смешно, что плакать хочется...Это у кого нет типа TIME???
(СУБД уровня "неуловимый Джо" не рассматриваем).
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38281028
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rockclimberDmitry Eliseevсмешно, когда у СУБД нет автоинкрементных полей и типа TIME, так смешно, что плакать хочется...Это у кого нет типа TIME???
(СУБД уровня "неуловимый Джо" не рассматриваем).У очень многих на самом деле. Даже Sybase ASE вплоть до 12-ой версии считал что одного datetime хватит и для дат и для времени. Правда в15-ой версии одумались :)
MS SQL всю жизнь шел у Sybase ASE на поводу и тоже не имел отдельных типов date и time вплоть до 2005-ой версии. Их сделали только в 2008-ой.
Ну а SQLite в принципе не имеет никаких специальных типов для даты-времени. Там обходяться хранением целых и/или текстов и кучкой функций для конвертации этих типов в дату-время. Тем не менее SQLite является самой популярной встраиваемой базой на сегодня (да и самой лучшей пожалуй).
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38281125
rockclimber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlMS SQL всю жизнь шел у Sybase ASE на поводу и тоже не имел отдельных типов date и time вплоть до 2005-ой версии. Их сделали только в 2008-ой.Жесть какая. Вроде, даже в аксессе есть тип даты, я думал, что уж в MS SQL-то точно должно быть...
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38281158
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rockclimberWhite OwlMS SQL всю жизнь шел у Sybase ASE на поводу и тоже не имел отдельных типов date и time вплоть до 2005-ой версии. Их сделали только в 2008-ой.Жесть какая. Вроде, даже в аксессе есть тип даты, я думал, что уж в MS SQL-то точно должно быть...Вместо даты там datetime, округлённый до суток :)
...
Рейтинг: 0 / 0
Проектирование базы данных
    #38281328
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirrockclimberпропущено...
Жесть какая. Вроде, даже в аксессе есть тип даты, я думал, что уж в MS SQL-то точно должно быть...Вместо даты там datetime, округлённый до суток :)до каких, на фиг, суток?
...
Рейтинг: 0 / 0
69 сообщений из 69, показаны все 3 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Проектирование базы данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]