MIS3 — различия между версиями

Материал из ИбисоПедии
Перейти к: навигация, поиск
(Содержимое страницы заменено на «Здесь собраны все ссылки * MIS3. Концепция БД * [[MIS3. Интерфейс пользоват...»)
Строка 1: Строка 1:
 +
Здесь собраны все ссылки
 +
 
* [[MIS3. Концепция БД]]
 
* [[MIS3. Концепция БД]]
 
* [[MIS3. Интерфейс пользователя]]
 
* [[MIS3. Интерфейс пользователя]]
 
* [[MIS3. Разграничение доступа к функция системы]]
 
* [[MIS3. Разграничение доступа к функция системы]]
  
+
[[Категория:MIS3]]
 
 
 
 
== Целостность  ==
 
 
 
База сама должна поддерживать целостность данных – это возможно с помощью стандартных средств constraint и trigger.
 
 
 
Foreign Key на другие схемы допускается только в состоянии Disable. (подумать почему, и может быть сделать более жесткое требование).
 
 
 
TODO Нужен  скрипт который помогает найти недостающие FK. смотри на SVN "ER\DOC\DB\SCRIPTS\Columns - Кандидаты на FK.SQL"
 
 
 
== Самодокументирование  ==
 
 
 
Количество комментариев, Foregn Key должно и правил именования должно быть достаточным для понимания БД. Поэтому предъявляются следующие требования
 
 
{| width="100%" border="1" cellpadding="0" cellspacing="0"
 
|-
 
| Таблица
 
 
| Все таблицы и столбцы должны иметь комментарий. Для таблицы в комментарии обязательно должно быть написано кто автор таблицы Строка Author
 
|-
 
| Комментарий к столбцам
 
 
| Все столбцы должны иметь комментарий. Первичный ключ использующий sequence должен содержать комментарий вида «SEQUENCE=[SEQUNECE_NAME]». Такой комментарий позволит вчислить зависимости столбцов от последовательностей.&nbsp;<br>
 
|-
 
| Комментарии к коду<br>
 
 
| За основу берем формат комментариев из PLSQLDeveloper. Инструкция находится рядом с этим документом<br>
 
|}
 
 
 
TODO Также ye;ys  скрипты для проверки достаточности комментариев на основе MIS2:
 
* "MIS2\DOC\DB\SCRIPTS\Column - Правит комментарии к ID.sql"
 
* "MIS2\DOC\DB\SCRIPTS\Column - Столбцы без комментария.sql"
 
* "MIS2\DOC\DB\SCRIPTS\Columns - Неправильные комментарии к ID.sql"
 
* "MIS2\DOC\DB\SCRIPTS\Table - Неправильные комментарии к таблицам.sql"
 
 
 
== Соглашение об именовании  ==
 
 
 
Таблицы, процедуры, пакеты именуются без префиксов в единственном числе на английском языке. Для вторичных объектов - последовательностей, ключей, индексов и так далее - должны быть определены четкие правила, выводящие их имя из имени основного объекта. Какие именно - не суть; главное, нужен однозначный алгоритм. Большим минусом здесь является ограничение длины идентификаторов.
 
 
 
 
=== 1. Таблицы ===
 
 
 
 
 
1.1. Таблицы именуются существительными в ед. числе на английском языке. (Рассматривать как название сущности). Не использовать в именовании этих объектов символ «$»
 
 
 
1.2. Все таблицы и столбцы должны иметь комментарий. Для таблицы в комментарии обязательно должно быть написано кто автор таблицы. (После строчки “Author:” ). Если автор у таблицы изменился, то старого автора оставлять.
 
 
 
1.3. Каждая таблица должна иметь первичный ключ, типа INTEGER (название ID).
 
 
 
1.4. Первичные ключи делаем через bigserial
 
 
 
1.5. Если поле заполняется из SEQUENCE, то в комментарий должен содержать имя sequence по следующему шаблону '''SEQUENCE=[%SEQUENCE_NAME%]'''
 
 
 
1.6. Столбцы, ссылающиеся на другую таблицы именовать по правилу: '''%TABLE%_ID'''
 
 
 
1.7. Таблицы содержащие исторические данные '''%TABLE%_H'''
 
 
 
1.8. Временные таблицы '''%TABLE%_TMP'''
 
 
 
1.9. Таблицы созданные для каких либо тестов TEST_%TABLE%
 
 
 
1.10. Таблицы копии %TABLE%_YYMMDD
 
 
 
 
 
=== 2. Индексы ===
 
 
 
2.1. Индексы неуникальные (NORMAL) именуются по правилу '''IX_%TABLE%$%FIELDS%'''. Если название не помещается в 30 символов, то сокращать названия полей.
 
 
 
2.2. Индексы уникальные (NORMAL) именовать по правилу '''IU_%TABLE%$%FIELDS%'''. Если название не помещается в 30 символов, то сокращать названия полей.
 
 
 
2.3. Индексы функциональные (FUNCTION-BASED NORMAL) именовать по правилу '''IF_%TABLE%$%FUNC%'''.
 
 
 
2.4. Индексы первичного ключа именуются так же как и сам првичный ключ '''PK_%TABLE%$%'''
 
 
 
 
 
=== 3. Констаринты ===
 
 
 
3.1. Ссылки (References) именуем по правилу '''FK_%TABLE%$% REFTABLE%.''' Если название не помещается в 30 символов, то сокращать названия полей. Если есть две ссылки на одну таблицу, то именовать по правилу '''FK_%TABLE%$% REFTABLE%REFFIELD'''.
 
 
 
3.2. Not Null. Необязательное правило '''NN_%TABLE%$%FIELD%'''. Есть скрипт который все переименовывает.
 
 
 
3.3. Первичный ключ именуются по правилу '''PK_%TABLE%'''
 
 
 
 
 
=== 4. Триггеры ===
 
 
 
4.1. Именуются по правилу '''%TABLE%$%Суффикс%'''. Где суффикс определяет тип триггера и может иметь длину от 2 до 5 символов.
 
* Первая буква определяет момент срабатывания триггера (Timing) и может имеет значение A или B (After, Before)
 
* ДалееObject Event  - комбинация букв I,U,D
 
* Если триггер уровня оператора, то прибавляем в конце S
 
 
 
 
 
=== 5. Другие объекты ===
 
 
 
5.1. SEQUENCE должны иметь суффикс SEQ. Правило  выглядит так %TABLE%_%COLUMN%_SEQ.
 
 
 
5.2. Views            : <name>_V
 
 
 
5.3. Materialized Views: <name>_MV
 
 
 
5.4. Types            : <name>_T
 
 
 
5.5. Directories      : <name>_DIR
 
 
 
5.6. External Tables  : <name>_EXT
 
 
 
=== 6. PL/SQL Variables ===
 
 
 
6.1. Package Global Variables: g_variable_name
 
 
 
6.2. Local Variables        : l_variable_name
 
 
 
6.3. Types                  : t_type_name
 
 
 
6.4. Cursors                : c_cursor_name
 
 
 
6.5. Exceptions              : e_exception_name
 
 
 
6.6. Input Parameters        : i_parameter_name
 
 
 
6.7. Outut Parameters        : o_parameter_name
 
 
 
6.8. In/Out Parameters      : io_parameter_name
 
 
 
 
 
=== 7. Процедуры, функции, пакеты  ===
 
 
 
7.1. При объявлении переменных в заголовке обязателен префикс p_. Это избавит от неоднозначности при компиляции
 
 
 
 
7.2. Переменные внутри PL/SQL блока должны иметь префикс v_. Это избавит от неоднозначности при компиляции
 
 
 
 
7.3. Процедуры изменяющие данные в таблицах, должны иметь префикс '''DO_'''
 
 
 
 
7.4. Функции, возвращающие значение должные иметь префикс '''GET_'''
 
 
 
 
7.5. Комментарии пишем в виде, plsqldoc (plugin for plsqlDeveloper). Основные Тэги:
 
 
 
 
{| width="100%" border="1" cellpadding="0" cellspacing="0"
 
|-
 
! scope="col" | Tag
 
! scope="col" | Description
 
|-
 
| %param &lt;name&gt; &lt;text&gt;<br>
 
| The description of a function or procedure parameter. Subsequent %param tags will be placed in one table.<br>
 
|-
 
| %return &lt;text&gt;<br>
 
| A description of the return value of a function.<br>
 
|-
 
| %value &lt;name&gt; &lt;text&gt;<br>
 
| A possible value for a package variable or object type attribute. Subsequent %value tags will be placed in one table.<br>
 
|-
 
| %raises &lt;name[.element]&gt; &lt;text&gt;<br>
 
| A list of exceptions that can be raised by a program unit. Subsequent %raises tags will be placed in one table.<br>
 
|-
 
| %usage &lt;text&gt;<br>
 
| A text to describe the usage of the element.<br>
 
|-
 
| %author &lt;name&gt;<br>
 
| The author of the object<br>
 
|-
 
| {%link &lt;name[.element[;n]]&gt; <br> [description]}<br>or<br>{%link &lt;filename&gt; [description]}<br><br>
 
| An explicit hyperlink. To link to a specific overloading of a program unit, follow the name by a semi-colon and the overload index (1-based). The optional description will be placed in the document. For example:<br>The {%link department.name department name function} is...<br>Will result in:<br>The department name function is…<br><br>
 
|-
 
| {*} &lt;name&gt; &lt;text&gt;<br>
 
| A bullet of a bullet list. Useful to describe possible values of a parameter or return value. For example:<br>{*} 0 The function returned successfully<br>{*} 1 The employee does not exist<br>{*} 2 The employee record is locked<br><br>
 
|-
 
| {%skip}<br>
 
| Skip this comment block for documentation.<br>
 
|-
 
|}
 
 
 
<br>
 
Пример:
 
<source lang="sql">
 
create or replace package Department is
 
 
 
  -- Package with functionality related to the Dept table.
 
  -- Most functions require a p_DeptNo parameter, which
 
  -- is the value of the DeptNo column in the {%link Dept}
 
  -- table.
 
 
 
  -- Value for p_Wait parameters, indicating to wait
 
  -- until a lock is released.
 
  c_Wait constant boolean := true;
 
  -- Value for p_Wait parameters, indicating not to
 
  -- wait until a lock is released.
 
  c_NoWait constant boolean := false;
 
 
 
  -- Exception raised when an invalid order is specified
 
  e_InvalidOrder exception;
 
  -- Exception raised when a record is locked
 
  e_RecordLocked exception;
 
 
 
  -- A department record. It contains all columns of the
 
  -- {%link Dept} table.
 
  subtype t_DeptRecord is Dept%rowtype;
 
 
 
  -- A cursor type for parameters that return a set of
 
  -- departments.
 
  type t_DeptCursor is ref cursor return Dept%rowtype;
 
 
 
  -- Open a cursor to select departments in a particular order.
 
  -- %param p_cursor The cursor that will be opened for all
 
  --                Dept records in the given order
 
  -- %param p_order  The order of the Dept records. Valid values are:
 
  --                {*} 'DEPTNO' Records are ordered by DeptNo.
 
  --                {*} 'NAME'  Records are ordered by name.
 
  --                {*} 'LOC'    Records are ordered by loc. The secondary
 
  --                              sort column is DeptNo.
 
  --                {*} NULL    The result set  will not be ordered
 
  --                              (default).
 
  -- %raises e_InvalidOrder Raised when the value of p_order is invalid.
 
  procedure SelectRecords(p_Cursor in out t_DeptCursor,
 
                          p_Order  varchar2 default null);
 
 
 
  -- Lock a Dept record.
 
  -- %param p_DeptNo The number of the department record to lock.
 
  -- %param p_Wait  Wait for an existing lock to be released?
 
  --                {*} c_Wait  Wait until the record is available.
 
  --                {*} c_NoWait Don't wait, and raise e_RecordLocked
 
  --                              if the record is locked.
 
  -- %raises e_RecordLocked Raised when the record is locked and
 
  --                        p_Wait = c_Wait.
 
  procedure LockRecord(p_DeptNo Dept.DeptNo%type,
 
                      p_Wait  boolean default c_Wait);
 
 
 
  -- Return the number of employees in the {%link Emp} table that
 
  -- belong to this department.
 
  -- %param  p_DeptNo The number of the department.
 
  -- %return The number of employees
 
  function EmpCount(p_DeptNo Dept.DeptNo%type) return integer;
 
 
 
  -- Return the employee number of the manager of the department.
 
  -- %param  p_DeptNo The number of the department.
 
  -- %return The number of the employee (Emp.EmpNo) that manages
 
  --        this department (Emp.job = 'MANAGER'). If the
 
  --        department does not have a manager, NULL is returned.
 
  function Manager(p_DeptNo Dept.DeptNo%type) return Emp.EmpNo%type;
 
 
 
end Department;
 
 
 
</source>
 
 
 
 
 
=== 8. Объекты связанные с аудитом данных ===
 
 
 
8.1. Таблицы, и индексы создаем в таблеспайсах LOG, LOG_INDX
 
 
8.2. Таблицы должны иметь суффикс %TABLE%_LOG
 
 
 
8.3 с декабря 2012 появилась возможность ведения истории изменений по таблице см. [[PKG_GENERATE]]
 
 
 
=== 9. Сводная таблица правил ===
 
 
 
=== 10. Сокращения  ===
 
 
 
Если при именовании подчиненных объектов (FK и прочее), выходим за ограничение длины, то использовать следующее правило:<br>
 
*APPLICATIONS = APPL (4)
 
*APPLICATION_FUNCTIONS = APFU (2:2)
 
*APPLICATON_FUNCTION_ROLES = APFR (2:1:1)
 
*APPLICATION_FUNCTION_ROLE_BANANAS = AFRB (1:1:1:1)
 
 
 
По возможности использовать стандартные сокращения при названии сущностей &nbsp;:
 
 
{| width="550" border="1" cellpadding="0" cellspacing="0"
 
|+ Стандартные сокращения
 
 
 
|-
 
| Account
 
 
| ACCNT
 
 
|
 
|-
 
| Addres
 
 
| ADDR
 
 
| Адрес
 
|-
 
| Adjustment
 
 
| ADJ
 
 
|
 
|-
 
| Alternate
 
 
| ALT
 
 
|
 
|-
 
| Application
 
 
| APP
 
 
|
 
|-
 
| Attribute
 
 
| ATTR
 
 
|
 
|-
 
| Beginning
 
 
| BEG
 
 
|
 
|-
 
| Budget
 
 
| BUDG
 
 
|
 
|-
 
| Category
 
 
| CATG
 
 
|
 
|-
 
| COUNT
 
 
| CNT
 
 
|
 
|-
 
| Difference
 
 
| DIFF
 
 
|
 
|-
 
| Column
 
| COL
 
|
 
|-
 
| Comment
 
| CMT
 
| Комментарий
 
|-
 
| Currency
 
 
| CURR
 
 
|
 
|-
 
| Customer
 
| CUST
 
| заказчик
 
|-
 
| DATE
 
| DT
 
| дата
 
|-
 
| DAY
 
| DY
 
| день
 
|-
 
| Department
 
| DEPT
 
| отдел, подразделение
 
|-
 
| Document
 
| DOC
 
| документ
 
|-
 
| Employee
 
| EMP
 
| работник
 
|-
 
| Error
 
| ERR
 
|
 
|-
 
| Identifier
 
| ID
 
|
 
|-
 
| Information
 
| INFO
 
| информация
 
|-
 
| Inventory
 
| INV
 
| Опись. Реестр, инвентарь
 
|-
 
| Location
 
| LOC
 
| местоположение
 
|-
 
| Length
 
| LNTH
 
| длина
 
|-
 
| Month
 
| MO
 
| месяц
 
|-
 
| Number
 
| NUM
 
| номер, количество
 
|-
 
| Organization
 
| ORG
 
| организация
 
|-
 
| Option
 
| OPT
 
|
 
|-
 
| Payment
 
| PAY
 
| платеж
 
|-
 
| Percent
 
| PCT
 
| процент
 
|-
 
| Previous
 
| PREV
 
| предыдущий
 
|-
 
| Record
 
| REC
 
| запись
 
|-
 
| Report
 
| RPT
 
| отчет
 
|-
 
| Required
 
| REQ
 
|
 
|-
 
| Section
 
| SECT
 
| секция
 
|-
 
| Status
 
| STS
 
| статус
 
|-
 
| Table
 
| TAB
 
| таблица
 
|-
 
| Temporary
 
| TEMP
 
| временный
 
|-
 
| Value
 
| VAL
 
| значение, переменная
 
|-
 
| Version
 
| VER
 
| версия
 
|-
 
| Year
 
| YR
 
| год
 
|}
 
 
 
См также скрипты для проверки правильности именования объектов:
 
* "MIS2\DOC\DB\SCRIPTS\Constraint - Set RULE FK name.sql"
 
* "MIS2\DOC\DB\SCRIPTS\Index - Set RULE Name.sql"
 
* "MIS2\DOC\DB\SCRIPTSIndex - Процент правильно именованных индексов.sql"
 
* "MIS2\DOC\DB\SCRIPTS\SEQUENCE - Неправильно названные.sql"
 
* "MIS2\DOC\DB\SCRIPTS\Table -названия во множественном числе.sql"
 
* "MIS2\DOC\DB\SCRIPTS\Trigger - Создаем скрипт для правильного именования.sql"
 
 
 
== Безопасность ==
 
 
 
Авторизация пользователей осуществляется с помощью стандартных средств Oracle. При этом:
 
* скрывается истинный пароль и пользователя.
 
* Пользователь MIS имеет очень сложный пароль и под ним никто не должен логиниться.
 
* Логины Oracle формируются по правилу Z+<логин в системе МИС>
 
* Пользователь MISADMIN обладает правами DBA.
 
 
 
 
 
=== Роли POSTGRESQL ===
 
{| width="90%" border="1" cellpadding="0" cellspacing="0"
 
|-
 
! scope="col" | Роль
 
! scope="col" | Назначение и права
 
|-
 
| MIS_ROLE
 
| Роль которой обладают все пользователи МИС. Дает необходимые права для работы в системе
 
|-
 
| DEVELOPER_ROLE
 
| Роль для девелоперов из медотрейд
 
|}
 
 
 
== Разделение схем  ==
 
Все данные МИС должны храниться в схеме MIS. Данные аудита должны храниться в схеме MIS_LOG. Архивные данные в схеме MIS_HST.
 
 
 
{| width="90%" border="1" cellpadding="0" cellspacing="0"
 
|-
 
! scope="col" | Схема
 
! scope="col" | Назначение
 
|-
 
| MM
 
| Основная схема для хранения данных
 
|-
 
| AU
 
| Аудит данных. История изменения
 
|-
 
| HT
 
| Архивные данные
 
|}
 
 
 
== Табличные  пространства==
 
 
 
Данные и индексы хранить в разных таблспейсах  USR_DATA и USR _INDX . Данные аудита хранить  в таблеспейсах LOG_DATA и LOG_INDX. Архивные данные в схемах HST_DATA и HST_INDX.
 
 
 
{| width="90%" border="1" cellpadding="0" cellspacing="0"
 
|-
 
! scope="col" | Tablespace
 
! scope="col" | Назначение
 
|-
 
| USR_DATA
 
| таблицы данных из схемы MIS
 
|-
 
| USR_INDX
 
| индексы из схемы MIS
 
|-
 
| LOG_DATA
 
| Данные аудита
 
|-
 
| LOG_INDX
 
| Архивные данные
 
|-
 
| HST_DATA
 
| Индексы архива
 
|-
 
| HST_INDX
 
| Индексы аудита
 
|}
 
 
 
== AUDIT ==
 
 
 
 
 
== Резервное копирование ==
 
 
 
Должна быть разработана концепция резервного копирования с помощью rman
 
 
 
== Разделение данных на оперативные данные и архивные. ==
 
 
 
Таблицы, которые относятся к архивным данным хранить в схеме MIS_HST, таблспейсы HST_DATA, HST_INDX
 
 
 
 
 
== Верификация ==
 
 
 
Скрипты для верификации именования и расположения объектов находятся:
 
 
 
TODO переделать svn://192.168.1.2/MIS2/DOC/DB/SCRIPTS
 
 
 
== Ссылки ==
 
 
 
* Схема данных храниться в [[PowerDesigner]] в общем репозитарии [[http://192.168.1.9/mediawiki/index.php/%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BA_%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%B0%D1%80%D0%B8%D1%8E_Sybase_Power_Designer]]
 
 
 
[[Категория:Postgresql]] [[Категория:MIS3]]
 

Версия 14:43, 10 июля 2013

Здесь собраны все ссылки