здесь хранятся ACL для всех записей и banACL для журналов
структура хранения довольно самоописывающая, просто посмотрите на содержимое
(мне бы хотелось узнать, какие поля что означают)
Имя
Тип
Описание
OBJECT_ID
NUMBER
OBJECT_TYPE
VARCHAR2(20)
OBJECT_RIGHT
VARCHAR2(20)
ACL
CLOB
5. NPJ_BAN_IP
результаты бана по IP, который осуществляется на основе «антироботовой» защиты комментирования
Имя
Тип
Описание
ID
NUMBER
ID
IP
VARCHAR2(16)
IP
IPLONG
NUMBER
BANNED_DATETIME
DATE
6. NPJ_COMMENTS
здесь хранятся все комментарии к записям
структура хранения тоже кажется довольно прозрачной
parent_id, lft_id, rgt_id – поля, по которым строится дерево дискуссий
Имя
Тип
Описание
COMMENT_ID
NUMBER
ID
ACTIVE
NUMBER
FROZEN
NUMBER
PIC_ID
NUMBER
ID аватара пользователя
SUBJECT
VARCHAR2(250)
Тема
BODY_POST
CLOB
Текст комментария
USER_ID
NUMBER
ID пользователя
USER_LOGIN
VARCHAR2(20)
Логин пользователя
USER_NAME
VARCHAR2(250)
Имя пользователя
USER_NODE_ID
VARCHAR2(20)
Узел пользователя?
CREATED_DATETIME
DATE
Дата создания
IP_XFF
VARCHAR2(250)
RECORD_ID
NUMBER
ID откомментированной записи
PARENT_ID
NUMBER
LFT_ID
NUMBER
RGT_ID
NUMBER
REP_ORIGINAL_ID
NUMBER
REP_NODE_ID
VARCHAR2(20)
REPLICATOR_USER_ID
NUMBER
DISALLOW_REPLICATE
NUMBER(1, 0)
7. NPJ_COMMENTS_FILTERED
Community-filter part. So called Shtorki dlja kommentariev
т.н. «шторки» – фильтры комментариев для отдельных сообществ.
хранится ид отфильтрованной ветки; ид журнала, для которого наложен фильтр; и модератор, сделавший это
Имя
Тип
Описание
ID
NUMBER
ID
COMMENT_ID
NUMBER
ID комментария
FILTER_USER_ID
NUMBER
ID журнала
MODERATOR_ID
NUMBER
ID модератора, сделавшего фильтр
CREATED_DATETIME
DATE
Дата создания фильтра
8. NPJ_COMMENTS_REPLICAS
вспомогательная таблица для учёта реплицированных комментариев
Имя
Тип
Описание
COMMENT_ID
NUMBER
ID комментария
REPLICATED_TO_NODE_ID
VARCHAR2(20)
REPLICATED_TO_COMMENT_ID
NUMBER
REPLICATED_DATETIME
DATE
9. NPJ_CSA
таблица для хранения временных ключей межузловой авторизации
Имя
Тип
Описание
ID
NUMBER
CSA
VARCHAR2(50)
10. NPJ_GROUPS
«отношения между пользователями»: группы. Например, «все друзья этого пользователя».
у каждого аккаунта (пользователя, РГ) может быть произвольное число таких «групп», куда попадают другие пользователи, с которыми у него есть отношения.
есть системные группы is_system=1, которые нельзя удалить руками их владельца. Например «все конфиденты».
есть метасистемные группы is_system=2..4 – они используются, чтобы при создании нового аккаунта какого-то типа, создать нужный ассортимент системных групп. =2 – для пользователя, =4 – для РГ.
user_id – к какому аккаунту относится эта группа
group_rank – уровень группы. Если группа рангом 2, то все её члены как бы «входят» во все группы ранга 1. Обратите внимание, как устроены системные группы «члены/модераторы»
group_type – не используется нигде.
Имя
Тип
Описание
GROUP_ID
NUMBER
ID
GROUP_NAME
VARCHAR2(100)
Имя группы
USER_ID
NUMBER
ID пользователя, для которого данная группа
GROUP_RANK
NUMBER
Уровень группы
IS_SYSTEM
NUMBER(4, 0)
Cистемная группа
GROUP_TYPE
NUMBER
Не используется
POS
NUMBER
IS_DEFAULT
NUMBER(4, 0)
11. NPJ_LINKS
таблица перекрёстных ссылок между записями, существует для action Backlinks.
Имя
Тип
Описание
LINK_ID
NUMBER
ID
FROM_USER_ID
NUMBER
FROM_ID
NUMBER
TO_USER_ID
NUMBER
TO_ID
NUMBER
TO_SUPERTAG
VARCHAR2(250)
TO_TAG
VARCHAR2(250)
LINK_TEXT
VARCHAR2(250)
12. NPJ_MAILDEBUG
таблица для складывания в неё входящих на узел писем, которые не удалось распознать как команды на создание/редактирование записей/комментариев
Имя
Тип
Описание
MAIL_ID
NUMBER
ID
BODY
CLOB
Текст письма
ERROR
VARCHAR2(250)
Текст сообщения об ошибке
DATETIME
DATE
Дата поступления
13. NPJ_NODES
таблица с актуальным перечнем узлов НПЖСети.
если узел не Npj Name Server, то содержимое этой таблицы будет перезаписываться при каждом получении обновления с NNS.
is_local – это ваш узел!
здесь хранятся «профили» аккаунтов. Т.е. та информация, которая является «описательной» (дополнительной) для журналов пользователей/сообществ.
lft_id, rgt_id – пока не используются
*_template – пока не используется
*_membership – группа какого ранга имеет соответствующие права?
last_updated – пока не поддерживается
email_confirm – если пустой, то емайл подтверждён. Иначе – шифр подтверждения
Имя
Тип
Описание
USER_ID
NUMBER
ID пользователя
LFT_ID
NUMBER
Пока не используется
RGT_ID
NUMBER
Пока не используется
PARENT_ID
NUMBER
TOTAL_POSTED
NUMBER
SECURITY_TYPE
NUMBER
ACCOUNT_TEMPLATE
VARCHAR2(20)
Пока не используется
FRIENDS_TEMPLATE
VARCHAR2(20)
Пока не используется
DEFAULT_MEMBERSHIP
NUMBER
POST_MEMBERSHIP
NUMBER
ANNOUNCE_MEMBERSHIP
NUMBER
OWNER_MEMBERSHIP
NUMBER
CREATION_DATE
DATE
Дата создания
LAST_UPDATED
DATE
Пока не поддерживается
EMAIL
VARCHAR2(250)
E-Mail аккаунта
EMAIL_CONFIRM
VARCHAR2(100)
Если пустой, то емайл подтверждён. Иначе – шифр подтверждения
ICQ_UIN
VARCHAR2(20)
ICQ UIN
WEBSITE_URL
VARCHAR2(250)
URL сайта
WEBSITE_NAME
VARCHAR2(250)
Имя сайта
FILE_URL_PREFIX
VARCHAR2(250)
JOURNAL_NAME
VARCHAR2(250)
Имя журнала
JOURNAL_DESC
CLOB
Описание журнала
BIO
CLOB
Биография
INTERESTS
CLOB
Интересы
SEX
NUMBER
Пол. Неясно, какие значения принимает
CITY
VARCHAR2(100)
Город
REGION
VARCHAR2(100)
Регион
COUNTRY
VARCHAR2(100)
Страна
BIRTHDAY
DATE
Дата рождения
NOTIFY_COMMENTS
NUMBER(1, 0)
Уведомлять о комментариях?
REPLICATION_ALLOWED
NUMBER(1, 0)
Разрешена репликация?
FRIENDS_PAGE_SIZE
NUMBER
PERSONAL_PAGE_SIZE
NUMBER
RECENTCHANGES_SIZE
NUMBER
TEMPORARY_PASSWORD
VARCHAR2(32)
TEMPORARY_PASSWORD_CREATED
DATE
NUMBER_FRIENDS
NUMBER
NUMBER_FRIENDOF
NUMBER
SKIN
VARCHAR2(20)
Шкурка для UI
ADVANCED
CLOB
TEMPLATE_ANNOUNCE
VARCHAR2(250)
Шаблон для анонсов
TEMPLATE_DIGEST
VARCHAR2(250)
Шаблон для дайджестов
16. NPJ_RECORD_VERSIONS
здесь хранятся «версии» записей – их устаревшие тексты. При редактировании записи старое её состояние записывается сюда, и используется при диффах.
Имя
Тип
Описание
RECORD_ID
NUMBER
ID записи
VERSION_ID
NUMBER
ID
BODY
CLOB
Текст записи
BODY_R
CLOB
Текст записи (показывается при её отображении)
FORMATTING
VARCHAR2(20)
EDITED_DATETIME
DATE
Дата изменения
VERSION_TAG
VARCHAR2(100)
EDITED_USER_LOGIN
VARCHAR2(20)
EDITED_USER_NAME
VARCHAR2(250)
EDITED_USER_NODE_ID
VARCHAR2(20)
17. NPJ_RECORDS
очень важная таблица, в которой хранятся записи (сообщения и документы, они же категории)
user_id – в каком журнале запись, author_id – кто написал запись. Всё это не имеет отношения к публикации сообщений в сообщества
*_r, *_post – разные степени отформатированности текстов. *_r показывается при отображении записи (и ещё доформатируется), *_post используется для сборки лент
default_show_parameter – фактически obsolete
group_1..4 – какие «группы доступа» (из таблицы npj_groups) установлены для записи. Если все нули – запись публична. Кроме этого, есть специальные комбинации для «приватной записи», «записи для всех конфидентов», «записи с доступом только в сообщества» и «записи для глобальной группы доступа».
keywords/crossposted – отформатированная строка про то, куда опубликована запись. Используется для того, чтобы показываться в ленте сообщений. Не для определения, куда опубликовано.
Имя
Тип
Описание
RECORD_ID
NUMBER
ID
TYPE
NUMBER
USER_ID
NUMBER
ID журнала
AUTHOR_ID
NUMBER
ID автора
SUBJECT
VARCHAR2(250)
Тема
SUBJECT_R
VARCHAR2(255)
Тема (показывается при отображении записи)
SUBJECT_POST
VARCHAR2(255)
Тема (используется для сборки лент)
TAG
VARCHAR2(250)
SUPERTAG
VARCHAR2(250)
DEPTH
NUMBER
IS_PARENT
NUMBER
DEFAULT_SHOW_PARAMETER
VARCHAR2(20)
Не используется
DEFAULT_SHOW_PARAMETER_PARAM
VARCHAR2(50)
Не используется?
DEFAULT_SHOW_PARAMETER_ADD
NUMBER
Не используется?
DEFAULT_SHOW_PARAMETER_MORE
VARCHAR2(20)
Не используется?
DEF_SHOW_PARAMETER_MORE_PARAM
VARCHAR2(50)
Не используется?
BODY
CLOB
Текст записи
BODY_R
CLOB
Текст (показывается при отображении записи)
BODY_POST
CLOB
Текст (используется для сборки лент)
BODY_TOC
CLOB
BODY_OPTIONS
VARCHAR2(250)
FORMATTING
VARCHAR2(20)
VERSION_TAG
VARCHAR2(100)
PIC_ID
NUMBER
ID аватара пользователя
USER_DATETIME
DATE
CREATED_DATETIME
DATE
Дата создания
EDITED_DATETIME
DATE
Дата изменения
COMMENTED_DATETIME
DATE
Дата последнего комментария
LAST_COMMENT_ID
NUMBER
ID последнего комментария
DISALLOW_COMMENTS
NUMBER(1, 0)
Запрещены комментарии?
DISALLOW_SYNDICATE
NUMBER(1, 0)
Запрещена синдикация?
DISALLOW_REPLICATE
NUMBER(1, 0)
Запрещена репликация?
DISALLOW_NOTIFY_COMMENTS
NUMBER(1, 0)
Запрещены уведомления о комментариях?
NUMBER_COMMENTS
NUMBER
Количество комментариев
IS_DIGEST
NUMBER(1, 0)
Это дайджест
IS_ANNOUNCE
NUMBER(1, 0)
Это анонс
IS_KEYWORD
NUMBER(1, 0)
Это рубрика
TEMPLATE
VARCHAR2(20)
Шаблон для записи?
BY_MODULE
VARCHAR2(50)
GROUP_VERSIONS
NUMBER(1, 0)
GROUP1
NUMBER
Группа доступа
GROUP2
NUMBER
Группа доступа
GROUP3
NUMBER
Группа доступа
GROUP4
NUMBER
Группа доступа
KEYWORDS
CLOB
Отформатированная строка про то, куда опубликована запись. Используется для того, чтобы показываться в ленте сообщений
CROSSPOSTED
CLOB
Отформатированная строка про то, куда опубликована запись. Используется для того, чтобы показываться в ленте сообщений
FILTER
CLOB
EDITED_USER_LOGIN
VARCHAR2(20)
EDITED_USER_NAME
VARCHAR2(250)
EDITED_USER_NODE_ID
VARCHAR2(20)
18. NPJ_RECORDS_RARE
не у всех записей есть соответствующая строчка в этой таблице.
эта таблица с дополнительными данными для «извращённых» записей, типа «анонсов документов», «дайджестов» и «реплицированных записей».
Имя
Тип
Описание
RECORD_ID
NUMBER
ID записи
ANNOUNCED_ID
NUMBER
ANNOUNCED_SUPERTAG
VARCHAR2(250)
ANNOUNCED_TITLE
VARCHAR2(250)
ANNOUNCED_COMMENTS
NUMBER
ANNOUNCED_DISALLOW_COMMENTS
NUMBER
Запрещены комментарии?
DIGEST_DTFROM
DATE
DIGEST_DTTO
DATE
DIGEST_FILTER
NUMBER
REP_NODE_ID
VARCHAR2(20)
REPLICATOR_USER_ID
NUMBER
REP_ORIGINAL_ID
NUMBER
19. NPJ_RECORDS_REF
вторая очень важная таблица, обычно называемая «рефы». В ней хранятся связи «запись такая-то опубликована туда-то».
таблица используется для выборки страницы ленты (в т.н. «суперзапросе»)
публикация в сообщество здесь ничем существенным не отличается от публикации в рубрику.
owner_id – в каком журнале запись, keyword_id – какая рубрика (ид из таблицы записей), keyword_user_id – в каком журнале эта рубрика
syndicate – флаг, позволяющий в этой таблице понимать, нужно ли забирать эту запись при сборке ленты
priority – глубина транзитивного замыкания, которое производится при публикации в подрубрику (в этом случае в рефы пишутся строки о а) публикации в журнал, б) публикации в надрубрику и в) публикации в подрубрику – с разным приоритетом, что позволяет потом не собирать дубли).
Имя
Тип
Описание
REF_ID
NUMBER
ID
RECORD_ID
NUMBER
ID записи
OWNER_ID
NUMBER
В каком журнале запись
KEYWORD_ID
NUMBER
ID рубрики
KEYWORD_USER_ID
NUMBER
В каком журнале рубрика
GROUP1
NUMBER
Группа доступа
GROUP2
NUMBER
Группа доступа
GROUP3
NUMBER
Группа доступа
GROUP4
NUMBER
Группа доступа
SERVER_DATETIME
DATE
USER_DATETIME
DATE
LAST_COMMENT_ID
NUMBER
ID последнего комментария
COMMENTED_DATETIME
DATE
Дата последнего комментария
PRIORITY
NUMBER
Глубина транзитивного замыкания, которое производится при публикации в подрубрику
NEED_MODERATION
NUMBER
Требуется модерация
SYNDICATE
NUMBER
Нужно ли забирать эту запись при сборке ленты
ANNOUNCE
NUMBER
20. NPJ_RECORDS_REF_RULES
правила для автоматического изменения свойств записи при публикацию в отдельную подрубрику (т.н. «автоматизация рубрик»)
Имя
Тип
Описание
ID
NUMBER
ID
KEYWORD_ID
NUMBER
ID рубрики
FIELD
VARCHAR2(250)
VALUE
VARCHAR2(250)
21. NPJ_RECORDS_REPLICAS
информация о реплицированных сообщениях (из записей реплицируются только сообщения)
Имя
Тип
Описание
RECORD_ID
NUMBER
ID записи
REPLICATED_TO_NODE_ID
VARCHAR2(20)
REPLICATED_TO_RECORD_ID
NUMBER
REPLICATED_DATETIME
DATE
22. NPJ_REPLICA_DEST_RULES
правила репликации, для пункта назначения
Имя
Тип
Описание
DEST_RULE_ID
NUMBER
ID
REP_RULE_ID
NUMBER
ID правила для пункта отправки
NODE_ID
VARCHAR2(20)
ID узла назначения
OWNER_ID
NUMBER
ID журнала
DEST_ID
NUMBER
ID пункта назначения
RECORD_ID
NUMBER
ID записи
23. NPJ_REPLICA_DESTS
пункты назначения (приёмки) реплицируемых данных
Имя
Тип
Описание
DEST_RULE_ID
NUMBER
ID правила для пункта назначения
KEYWORD_ID
NUMBER
ID рубрики
24. NPJ_REPLICA_QUEUE
очередь на репликацию
Имя
Тип
Описание
ID
NUMBER
ID
REP_RULE_ID
NUMBER
ID правила для пункта отправки
OBJECT_ID
NUMBER
OBJECT_CLASS
VARCHAR2(20)
NODE_ID
VARCHAR2(20)
ID узла
DATETIME
DATE
25. NPJ_REPLICA_RULES
правила репликации для пунктов отправки
Имя
Тип
Описание
REP_RULE_ID
NUMBER
ID
OWNER_ID
NUMBER
ID журнала
NODE_ID
VARCHAR2(20)
ID узла
RECORD_ID
NUMBER
ID записи
DATE_FROM
DATE
DATE_TO
DATE
DONT_DOUBLEREPLICATE
NUMBER
Не повторять репликацию?
MAXPERDAY
NUMBER
MAXDEPTH
NUMBER
AUTHORS_WHITE
CLOB
AUTHORS_BLACK
CLOB
TOPIC_WHITE
CLOB
TOPIC_BLACK
CLOB
TODAYCOUNT
NUMBER
LAST
DATE
Дата последней репликации?
FACET_WHITE
CLOB
FACET_BLACK
CLOB
VALID
NUMBER(4, 0)
REPTYPE
NUMBER(4, 0)
26. NPJ_SUBSCRIPTION
здесь хранятся данные о том, кто на что подписался по электронной почте.
где-то вnode@npj:treeесть даже описание формата.
Имя
Тип
Описание
OBJECT_CLASS
VARCHAR2(20)
OBJECT_ID
NUMBER
OBJECT_METHOD
VARCHAR2(20)
METHOD_OPTION
NUMBER
USER_ID
NUMBER
ID пользователя
27. NPJ_USAGE_STATS
внутренняя статистика, какие методы запрашиваются и кем. По-умолчанию отключена, на узле npj.ru отключена после запуска в публичное использование.
Имя
Тип
Описание
ID
NUMBER
ID
EVENT
VARCHAR2(20)
PRINCIPAL_USER_ID
NUMBER
Кто запросил метод?
OBJECT_ID
NUMBER
OBJECT_ADDRESS
VARCHAR2(250)
OBJECT_CLASS
VARCHAR2(20)
OBJECT_METHOD
VARCHAR2(50)
OBJECT_PARAMS
VARCHAR2(50)
SERVER_DATETIME
DATE
ALREADY_PROCESSED
NUMBER
28. NPJ_USER_GROUPS
«отношения между пользователями»: с кем связан пользователь.
раньше были «группы» (не РГ!), теперь кто в них входит.
group_id – это про таблицу npj_groups
user_id – это какой пользователь является, например, «моим другом».
keyword_id – для ускорения выборок и возможности подписаться на подрубрику в «корреспонденты»
Имя
Тип
Описание
UG_ID
NUMBER
ID
GROUP_ID
NUMBER
ID группы
USER_ID
NUMBER
ID пользователя
KEYWORD_ID
NUMBER
ID рубрики
29. NPJ_USER_MENU
это меню ссылок пользователя, которое есть в minikui, criba, crabla, academic.
мелкая, вспомогательная табличка
Имя
Тип
Описание
ITEM_ID
NUMBER
ID
USER_ID
NUMBER
ID пользователя
NPJ_ADDRESS
VARCHAR2(250)
URL (локальный? Или любой?)
TITLE
VARCHAR2(250)
Заголовок ссылки
POS
NUMBER
Порядковый номер?
30. NPJ_USERPICS
здесь хранятся отметки о том, какие у пользователя юзерпики. Сами юзерпики хранятся в файловой системе
Имя
Тип
Описание
PIC_ID
NUMBER
ID
USER_ID
NUMBER
ID пользователя
DESCRIPTION
VARCHAR2(50)
Описание
HAVE_BIG
VARCHAR2(5)
Есть большой аватар
HAVE_SMALL
VARCHAR2(5)
Есть маленький аватар
31. NPJ_USERS
и последняя важная таблица, в которой хранятся аккаунты пользователей, а также сообществ и РГ
account_type – собственно, определяет, пользователь или РГ
account_class – см. «Классы аккаунтов» (где-то вnode::treeесть документация)
owner_user_id – кто создал этот аккаунт (очень полезно для сообществ, иногда интересно для пользователей)
domain_type – поле, позволяющее работать с адресами вида kuso.npj.ru
roles – obsolete поле, унаследованное из CMS
original_user_id – если этот аккаунт пришёл к нам с другого узла, то его id на том узле не тот, что на этом. Оригинальный (т.е. с того узла) ид мы храним в этом поле
root_record_id – запись, которая является «корневой» (адрес которой равен login@npj:, таг которой пуст)
Имя
Тип
Описание
USER_ID
NUMBER
ID
ROOT_RECORD_ID
NUMBER
ID корневой записи
LOGIN
VARCHAR2(20)
Логин
USER_NAME
VARCHAR2(250)
Имя пользователя
USER_LOGIN
VARCHAR2(20)
Логин пользователя (чем отличается от LOGIN?)
NODE_ID
VARCHAR2(20)
ID узла
OWNER_USER_ID
NUMBER
Создатель журнала
ACCOUNT_TYPE
NUMBER
Тип аккаунта
ACCOUNT_CLASS
VARCHAR2(250)
Класс аккаунта
POPULATE_TYPE
NUMBER
DOMAIN_TYPE
NUMBER
Поле, позволяющее работать с адресами вида kuso.npj.ru