powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Структура таблиц с данными
17 сообщений из 17, страница 1 из 1
Структура таблиц с данными
    #33264816
mirochik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!

Ситуация такая, мне по наследству досталась база и десятка два клиентских программ к этой базе.
В базе объекты хранятся в таблицах вида:
id int,
field0 varchar(100),
field1 float,
и т.д.
Объект это некая запись с набором полей, например, книга - поля id, автор, название и т.п.

Сейчас мне в базу нужно добавить следующее:
1. Распределение доступа(защита от несанкционированной порчи данных).
2. Протоколирование всех изменений полей объектов с автором, датой и т.п..
3. Некоторые функции, которые относятся ко всем объектам базы, например, напоминания и т.п.
4. Постоянное добавление новых типов объектов в базу.

После того, как я с этим столкнулся, я понял, что должен быть некий единый идентификатор объекта в базе(obj_id), без него будет тяжело создать функции, относящиеся ко всем объектам, да и вообще функции, которые могут работать более чем с одним типом объекта.
Распределение доступа и протоколирование всех изменений можно реализовать с помощью хранимых процедур, засунув в них все операции по добавлению протокола в таблицу протокола и назначив доступ к ним только тем, кому это нужно.
Постоянное добавление новых типов объектов можно упростить хранением полей всех объектов в нескольких таблицах.

В у меня появилась структура базы, описанная ниже. С базами данных я раньше работал очень мало(максимум что делал, вставлял готовые запросы в программу), поэтому решил спросить, на сколько описанная ниже структура базы работоспособна. Вполне возможно, что я про неё где-то прочитал, но от этого не легче. Я сейчас не в состоянии сказать на сколько это правильно. На сколько надёжно и т.п.

1. Создается общая таблица с id всех объектов(objs)
-----
obj_id int,
obj_type_id int.
-----
obj_id - id объекта, obj_type_id - id типа объекта.
И при добавлении нового объекта будет во первых производится добавление в эту таблицу, получение obj_id объекта, а потом уже добавление данных в таблицы, содержащие поля.
2. Создается таблица с типами объектов:
-----
obj_type_id int,
obj_type_info varchar(100)
-----
obj_type_id - id типа объекта.
obj_type_id = 1 obj_type_info = "Книга"
obj_type_id = 2 obj_type_info = "Шкаф"
и т.п.

3. Создается таблица с типами полей.
-----
obj_param_id int,
obj_type_id int,
obj_param_name varchar(100),
obj_param_type int
-----
obj_param_id - id параметра объекта типа obj_type_id.
для obj_type_id = 1 obj_param_id = 1 obj_param_name="Автор" obj_param_id = 2 obj_param_name="Название"
для obj_type_id = 2 obj_param_id = 3 obj_param_name="Высота" obj_param_id = 4 obj_param_name="Ширина"
и т.п.
4.
Все отдельные поля объектов записываются в каждый в свою таблицу по типам, т.е. поля типа int будут лежать в таблице int_data, varchar(100) в таблице varchar100_data, float в таблице float_data и т.д Структура этих таблиц будет примерно такой:
------------
int_id int
obj_id int
obj_param_id int
val int
---
и т.д.
т.е. пусть имеется шкаф с obj_id=23, тогда,
obj_id=23 obj_param_id=3 val=56 //Высота
obj_id=23 obj_param_id=4 val=65 //Ширина

5.
Записывать данные в таблицы можно будет с помощью хранимой процедуры типа
update_field
@obj_id int,
@obj_param_name varchar(100)
@val sql_variant
AS
BEGIN
--Получение типа параметраobj_type_id
...............

--Обновление поля в зависимости от типа параметра
IF (@obj_type_id=1) //int
BEGIN
UPDATE int_data SET val=CONVERT(int, @val) WHERE obj_id=@obj_id AND obj_param_id=@obj_param_id
END
ELSE
IF (@obj_type_id=2) //float
BEGIN
...
END
END

Т.е. одной процедурой можно будет изменять все имеющиеся параметры всех объектов.

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

5.
Получать данные этих объектов можно будет с помощью представлений вида(для шкафа):
SELECT
obj_id,
tbl0.val AS heigh,
tbl1.val AS width
FROM objs
LEFT OUTER JOIN int_data AS tbl0 ON tbl0.obj_param_id=1 AND tbl0.obj_id = objs.obj_id
LEFT OUTER JOIN varchar100_data AS tbl1 ON tbl1.obj_param_id=2 AND tbl1.obj_id =

Т.е. для каждого объекта написать такое представления(view), в результате с ними можно будет работать как с обычными таблицами.

Связи между объектами я планирую сделать отдельными таблицами, что бы контролировать средствами сервера связи.


На данный момент я вижу несколько недостатков:
1. Уменьшается надёжность базы. (лишние связи, данные различной важности будут лежать в одной таблице, на одной таблице будет завязана вся база).
2. Уменьшается скорость работы.
3. Нет возможности использовать все встроенные в сервер средства контроля целостности данных.

Что скажете?
...
Рейтинг: 0 / 0
Структура таблиц с данными
    #33264861
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Непонятно, зачем сущности совершенно разной природы сваливать по сути в одну плоскую таблицу (на самом деле в несколько - objs, objtypes, fieldstypes, и несколько таблиц по типам). То есть ВСЕ данные вы лишаете их семантики и храните единообразно. Зачем?

Недостатки:
1. Поскольку ваша структура не является отражением предметной области, то гораздо труднее писать бизнес-логику, то есть те вещи, которые семантически отражают действия в вашей предметной области.
2. Блокировки. Ужасы одновременного доступа. Фактически ЛЮБОЕ действие в системе приводит к обращению к одному и тому же крайне маленькому набору таблиц. Тут уже ничего не спасет - только в морг. Когда у вас начнут работать несколько пользователей, вы поймете, что сотворили :-)
3. Сделать внятные триггеры, процедуры, констрейнты, функции, вьюхи, внешние ключи - практически невозможно, поскольку см. п.1
4. Поддержка этого клубка макарон - проще повеситься сразу.
5. Вы пытаетесь активную директорию проимитировать? ;-)
...
Рейтинг: 0 / 0
Структура таблиц с данными
    #33264896
mirochik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GreenSunriseНепонятно, зачем сущности совершенно разной природы сваливать по сути в одну плоскую таблицу (на самом деле в несколько - objs, objtypes, fieldstypes, и несколько таблиц по типам). То есть ВСЕ данные вы лишаете их семантики и храните единообразно. Зачем?


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

Проще писать процедуры изменения полей разных объектов. Т.е. написание изменений вырождается в простейшую процедуру, вызывающую update_field.

Проще назначать некие "закладки", или что-либо ещё, что будет относится к абсолютно любым объектам. Например, напоминание о том, что какой-либо объект куда-либо перемещен.

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


GreenSunrise
Недостатки:
1. Поскольку ваша структура не является отражением предметной области, то гораздо труднее писать бизнес-логику, то есть те вещи, которые семантически отражают действия в вашей предметной области.
2. Блокировки. Ужасы одновременного доступа. Фактически ЛЮБОЕ действие в системе приводит к обращению к одному и тому же крайне маленькому набору таблиц. Тут уже ничего не спасет - только в морг. Когда у вас начнут работать несколько пользователей, вы поймете, что сотворили :-)
3. Сделать внятные триггеры, процедуры, констрейнты, функции, вьюхи, внешние ключи - практически невозможно, поскольку см. п.1
4. Поддержка этого клубка макарон - проще повеситься сразу.
5. Вы пытаетесь активную директорию проимитировать? ;-)

Нет, я пытаюсь упростить себе дальнейшую работу. Но знаний мало, и поэтому я решил узнать, что думают по этому поводу профессионалы.

А вообще, если оставить все объекты в отдельных таблицах, то как мои задачи решать правильно?
Правильно все же оставить единый id объекта и под каждый тип объекта писать свою процедуру на обновление, для того, что бы сохранить "отображение предметной области"?
Или как?
Как вообще можно несколько унифицировать структуру базы для моего случая?
...
Рейтинг: 0 / 0
Структура таблиц с данными
    #33264897
mirochik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mirochik
Как вообще можно несколько унифицировать структуру базы для моего случая?

имелось ввиду унифицировать доступ и работу со структурой.
...
Рейтинг: 0 / 0
Структура таблиц с данными
    #33264899
zayac
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я реализовал схему которая почти совпадает с вашей по хранению и сильно похожа по доступу. По заполнению (ваш п.5) трудно сказать, скорее всего нет.
Но я подозреваю что в моем случае сильно отличается характер данных.
Я храню далеко не всю базу а лишь несколько сотен справочников, структура которых постоянно меняется. Это был единственный способ избавиться от необходимости постоянно следить что поменялось в их структуре и вносить изменения в свою базу.
Запись и обновление структуры хранения производит только моя программа. Все остальные - только читают.
Приложения обращаются к view (по структуре - ваш пункт 6). Но данные (*_data) я храню в кластере (иначе скорость доступа неприемлима).
Справочники небольшие - до тысячи строк и до 30 полей.
За целосность отвечаю не я, а поставщик этих справочников (тот самый, который постоянно модифицирует их структуру).
Если что-то где-то окажеться разрушеным - просто берем и "заливаем" их по новой.

То-есть, если вы собираетесь так хранить ВСЕ данные, которые еще и НЕВОССТАНОВИМЫ - то я соглашусь с GreenSunrise. По всем пунктам.
...
Рейтинг: 0 / 0
Структура таблиц с данными
    #33264919
mirochik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, я собирался делать именно так.
А как правильно?
Как в моем случае правильно решить поставленные задачи?
...
Рейтинг: 0 / 0
Структура таблиц с данными
    #33264924
zayac
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mirochikПроще назначать некие "закладки", или что-либо ещё, что будет относится к абсолютно любым объектам. Например, напоминание о том, что какой-либо объект куда-либо перемещен.

Если нужно добавить новый объект, то мне нужно просто добавить новые записи в таблицы настроек и этот объект появится в базе автоматически.
Операции по модификации структуры таблиц необходимо сводить к минимуму. То что я создал - это от безысходности. Не я устанавливал правила. А создание... ну продумать структуру и создавать create table.

mirochikЯ хочу автоматизировать протоколирование изменения полей таблиц, т.е. что бы изменения вносились автоматически и что бы это можно было бы сделать в одном месте, например, в процедуре update_field, можно добавить строчку, заносящую в протокол информацию об измененных полях.
Как по мне, так аудит - это задача к которой необходимо подходить очень осторожно. Как правило аудита требуют далеко не все таблицы, а в тех что требуют - далеко не все поля. Продумайте на какие таблицы необходимо повесить тригера и готовтесь к неприятному сюрпризу - размер таблиц в которые будут идти результаты аудита будет увеличиваться очень быстро. А протоколировать изменения всего-всего-всего... вы потом не разберете где меняли "ЧП Иваноф" на "ЧП Иванов", а где остатки на счете этого ЧП.
...
Рейтинг: 0 / 0
Структура таблиц с данными
    #33264955
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mirochikЯ хочу автоматизировать протоколирование изменения полей таблиц, т.е. что бы изменения вносились автоматически и что бы это можно было бы сделать в одном месте, например, в процедуре update_field, можно добавить строчку, заносящую в протокол информацию об измененных полях.
Почитайте вот эту статью: http://www.sql.ru/articles/mssql/2005/030701ChangesLogging.shtml

Особенно вот это - http://www.sql.ru/articles/mssql/2005/030701ChangesLogging.shtml#24

mirochikПроще писать процедуры изменения полей разных объектов. Т.е. написание изменений вырождается в простейшую процедуру, вызывающую update_field.

Проще назначать некие "закладки", или что-либо ещё, что будет относится к абсолютно любым объектам. Например, напоминание о том, что какой-либо объект куда-либо перемещен.
Это прекрасно можно сделать отдельной таблицей, хранящей сущность "schedule".

mirochikЕсли нужно добавить новый объект, то мне нужно просто добавить новые записи в таблицы настроек и этот объект появится в базе автоматически.
Точно также можно автоматически генерить create table, alter table add columns и т.д. Вообще вы уверены, что такая динамичность нужна? Вы совершенно точно понимаете, что такое расширение структуры необходимо или это проистекает от недопонимания, что в итоге надо получить? Может быть, это недостаточный анализ ПО и недостаточно четкая постановка задачи?

mirochikНет, я пытаюсь упростить себе дальнейшую работу. Но знаний мало, и поэтому я решил узнать, что думают по этому поводу профессионалы.
Имхо, вы ее себе безумно усложняете.

mirochikА вообще, если оставить все объекты в отдельных таблицах, то как мои задачи решать правильно?
Правильно все же оставить единый id объекта и под каждый тип объекта писать свою процедуру на обновление, для того, что бы сохранить "отображение предметной области"?
Или как?
Как вообще можно несколько унифицировать структуру базы для моего случая?
Процедура, выражающая бизнес-логику, должна отражать действие предметной области. "обновить поле такое-то для таблицы такой-то" - это не семантика и не имеет отношения к предметной области. А вот "завести ордер на такого-то клиента" или "внести данные в существующую накладную номер такой-то" - это бизнес-логика.

Понимаете? Если действия, выражаемые процедурой, соответствуют действиям предметной области, то это бизнес-логика. Если это некая абстракция типа "лог всех изменений данной таблицы" - это не бизнес-логика. Это, строго говоря, системная процедура. Системная не в смысле, что она поставляется с сиквел-сервером, а в смысле, что она выполняет какие-то задачи, не привязанные к предметной области. Такие процедуры тоже нужны, конечно. Но у них цель другая.

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

Имхо, п.2 и п.3 из моего первого ответа перевешивают все плюсы, которые вы желаете получить от своей структуры.

Излишняя унификация структуры совершенно не нужна, если у вас нет на это действительно веских причин. А по вашему описанию их нет. Все задачи, что вы перечислили, можно чудесно решать без такой монстроидальной базы.
...
Рейтинг: 0 / 0
Структура таблиц с данными
    #33264958
mirochik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
zayac mirochikПроще назначать некие "закладки", или что-либо ещё, что будет относится к абсолютно любым объектам. Например, напоминание о том, что какой-либо объект куда-либо перемещен.

Если нужно добавить новый объект, то мне нужно просто добавить новые записи в таблицы настроек и этот объект появится в базе автоматически.
Операции по модификации структуры таблиц необходимо сводить к минимуму. То что я создал - это от безысходности. Не я устанавливал правила. А создание... ну продумать структуру и создавать create table.

mirochikЯ хочу автоматизировать протоколирование изменения полей таблиц, т.е. что бы изменения вносились автоматически и что бы это можно было бы сделать в одном месте, например, в процедуре update_field, можно добавить строчку, заносящую в протокол информацию об измененных полях.
Как по мне, так аудит - это задача к которой необходимо подходить очень осторожно. Как правило аудита требуют далеко не все таблицы, а в тех что требуют - далеко не все поля. Продумайте на какие таблицы необходимо повесить тригера и готовтесь к неприятному сюрпризу - размер таблиц в которые будут идти результаты аудита будет увеличиваться очень быстро. А протоколировать изменения всего-всего-всего... вы потом не разберете где меняли "ЧП Иваноф" на "ЧП Иванов", а где остатки на счете этого ЧП.


Т.е. структура базы должна быть с минимальными наворотами и максимально возможно отражать подобие физических объектов? Т.е. если есть какой-либо объект, обладающей 10тью полями, то все этим поля по возможности нужно сложить в одну запись отдельной (только для этого типа объектов) таблицы? Если нужна связь, то сделать таблицу связи только для этого объекта. Если нужен новый тип объекта, то нужно создать новую таблицу для него. Писать под каждый объект хранимые процедуры, отвечающие только за этот объект и т.п.? Все серьёзные базы сделаны именно так?

Что касается аудита(в моем случае я бы назвал это просто историей изменений), то все данные вводятся вручную, если я введу единый номер объекта, и будут записывать информацию о том, кто когда что и на что изменил поле этого объекта, то сделать выборку по этому объекту(именно объекту, а не полю) большого труда не составит. Если все изменения в базе будут производиться через хранимые процедуры, то это реализовать сохранение истории не сложно. Триггеры, как я рассчитывал, для этого потребоваться не должны, хотя… я уже не знаю:)
А единый номер объекта тоже нежелательно использовать? Если, допустим, реализовывать все объекты в отдельных таблицах, но ключевое поле объекта все же держать в отдельной таблице, что бы получить возможность сохранять и просматривать историю через единый интерфейс, а также, создать единый механизм для контроля перемещений объектов и т.п.
Или это тоже не правильно?

Я также думал, что при описанной мной выше структуре, в конечном счете можно будет реализовать связывание и "развязывание" объектов с помощью опять же одной подпрограммы. Что значительно упростило бы процесс написания программ, ускорило и т.п.

Вот.
...
Рейтинг: 0 / 0
Структура таблиц с данными
    #33264961
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то Вы пошли по правильному пути, но атрибуты я рекомендовал бы хранить каждый в своем поле, т.е.

Obj( Obj_Id, Name, Obj_Type_Id) Базовый класс

Book( Obj_Id, Theme, Author_Id ) - Книга, наследуется от базового, в базовой таблице название книги, в собственной таблице тема и ссылка на автора.

Можно сделать вьюхи редактируемые с instead of триггерами, в которых выполнять все необходимые проверки, и дать доступ только на вьюхи.

Для работы с данными очень неплохо было бы хранить иерархию типов в таблице Obj_Types( Obj_Type_Id, Parent_Type_Id )
...
Рейтинг: 0 / 0
Структура таблиц с данными
    #33264964
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При этом часть атрибутов (динамических, которые пользователи сами будут добавлять) можно хранить и по описанной Вами схеме.

--------------------
Не учи отца и баста!
...
Рейтинг: 0 / 0
Структура таблиц с данными
    #33264967
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прочитайте про систему Онтарио

http://winfaq.tpu.ru/arttab.shtml
--------------------
Не учи отца и баста!
...
Рейтинг: 0 / 0
Структура таблиц с данными
    #33264974
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mirochikТ.е. структура базы должна быть с минимальными наворотами и максимально возможно отражать подобие физических объектов? Т.е. если есть какой-либо объект, обладающей 10тью полями, то все этим поля по возможности нужно сложить в одну запись отдельной (только для этого типа объектов) таблицы? Если нужна связь, то сделать таблицу связи только для этого объекта. Если нужен новый тип объекта, то нужно создать новую таблицу для него. Писать под каждый объект хранимые процедуры, отвечающие только за этот объект и т.п.? Все серьёзные базы сделаны именно так?
Именно так :-))


mirochikЧто касается аудита(в моем случае я бы назвал это просто историей изменений), то все данные вводятся вручную, если я введу единый номер объекта, и будут записывать информацию о том, кто когда что и на что изменил поле этого объекта, то сделать выборку по этому объекту(именно объекту, а не полю) большого труда не составит. Если все изменения в базе будут производиться через хранимые процедуры, то это реализовать сохранение истории не сложно. Триггеры, как я рассчитывал, для этого потребоваться не должны, хотя… я уже не знаю:)
Почитайте статью по моей ссылке. Среди приведенных там вариантов реализации лога изменений есть и такой, который позволяет вести ВСЕ изменения ВСЕХ полей ВСЕХ объектов в ОДНОЙ таблице-логе. У этого метода есть свои преимущества и недостатки, но он вполне жизненен.

mirochikА единый номер объекта тоже нежелательно использовать? Если, допустим, реализовывать все объекты в отдельных таблицах, но ключевое поле объекта все же держать в отдельной таблице, что бы получить возможность сохранять и просматривать историю через единый интерфейс, а также, создать единый механизм для контроля перемещений объектов и т.п.
Или это тоже не правильно?
Для единого механизма просмотра истории см. опять же ту статью. Думаю, что эти задачи вполне решаемы и без "единого номера объекта". Хотя можно и его приклеить...

mirochikЯ также думал, что при описанной мной выше структуре, в конечном счете можно будет реализовать связывание и "развязывание" объектов с помощью опять же одной подпрограммы. Что значительно упростило бы процесс написания программ, ускорило и т.п.
Знаете, в нормальной базе обычно количество FOREIGN KEY исчисляется десятками и сотнями, что как раз соответствует всяческим связям между сущностями в ПО. Мне жутко интересно, каким образом вы планировали у себя реализовывать такое количество связей? И это всего-навсего FOREIGN KEY. А ведь есть еще DEFAULT, NOT NULL, UNIQUE, CHECK... Это все средства контроля над целостностью данных. Вы хотите это все потерять??? А если нет, то как вы собираетесь это впихнуть в свою структуру??? А без контроля за целостностью данных кому нужна ваша база?
------------------------------
Честно говоря, я вот представляю сейчас разработчика, которому надо написать новую хранимку или вьюшку, и вот он пытается это сделать на вашей структуре... У меня волосы дыбом встают.
...
Рейтинг: 0 / 0
Структура таблиц с данными
    #33264982
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Old Nick, mirochik & all: я ни в коем случае не хочу сказать, что описанная автором система нереализуема. Ясен пень, реализуема, и в каких-то случаях даже удобна. Я всего лишь хочу сказать, что те задачи, которые описывает автор, можно отлично решить в рамках традиционной архитектуры реляционных баз и при этом получить массу преимуществ, которые невозможны для того, что описаны в начальном посте.

Имхо и только имхо, эти преимущества ОЧЕНЬ вески.
...
Рейтинг: 0 / 0
Структура таблиц с данными
    #33264985
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И мне не чуждо внести несколько советов, использовать или нет - дело афтара вопроса.

Судя из задачи - на старте база со статической структурой, на выходе абсолютно другая база с метадинамичной структурой. Не сильно ли много нужно сделать? Это ведь на самом деле не просто добавить пару табличек, потому что справочники "пронизывают" все управленческие(если таковые имеются) и первичные документы... т.е. прийдется переделать все таблицы. За бизнес логику я вообще молчу - она реально изменится. Вобщем такая задача даже для команды не сильно быстрорешаемая.

Согласен с афтарами, которые не советуют ВСЕ справочники системы разворачивать на типы-аттрибуты. Это достаточно рискованно. Возможно завести только всякие второстепенные справочники в такую структуру. Но на этом дело то не остановится - ведь справочники нужны не чтобы любоваться ими, и начальство скажет - нахрен ты нам это сделал? нужно чтобы мы могли динамично добавлять поля в документы и привязвать опять же динамично эти справочники. Вобщем это дизайнер интерфейса встроенный нужно писать....

Вопрос я бы поставил так: Изменения застявят написать систему заново. Стоит ли это делать при такой кол-ве программистов? это займет столько-то времени.

Протоколирование - тривиальная задача даже для статической структуры. Возможно, что начальство попустится, если ему сделать протоколирование того что есть?
...
Рейтинг: 0 / 0
Структура таблиц с данными
    #33265206
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Данная структура, известная как EAV, применяется как правило для другой цели - ближе к вашему п.4, - когда состав параметров объектов заранее неизвестен и должен расширяться. В этом случае просто некуда деваться - давать пользователю права на создание таблиц не хочется.

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

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

Кстати, если уж будет словарь и собственная реализация целостности, то сюда же хорошо ляжет обобщенная справочная таблица
ОСпр(Список, КодПозиции, Наименование).
...
Рейтинг: 0 / 0
Структура таблиц с данными
    #33265400
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> 1. Распределение доступа(защита от несанкционированной порчи данных).

Легко делается по схеме rwe (по-моему, на ibase.ru был упрощенный вариант реализации).

> 2. Протоколирование всех изменений полей объектов с автором, датой и т.п.

Две подзадачи: 1. версионность структуры, 2. версионность данных. Для 1. проще всего реализовать собственное метаописание объектов базы данных. Проблемы: адекватное метаописание получится довольно объемным. Для 2. есть разные методы реализации, различающиеся в основном способом хранения архива.

> 3. Некоторые функции, которые относятся ко всем объектам базы, например, напоминания и т.п.

Тоже просто сделать на базе метаописания.

> 4. Постоянное добавление новых типов объектов в базу.

Предложил бы такой вариант: создавать все объекты базы данных обычным образом, отражая их состояние в метаописании. Это сильно упростит задачу.

> должен быть некий единый идентификатор объекта в базе

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

> 1. Уменьшается надёжность базы. (лишние связи, данные различной важности будут лежать в одной таблице,
> на одной таблице будет завязана вся база).

Это не совсем так. Нереляционной будет часть базы данных, связанная с метаданными и семантической схемой. Ограничений для остальной структуры нет.

> 2. Уменьшается скорость работы.

Да, и с этим ничего не поделаешь.

> Нет возможности использовать все встроенные в сервер средства контроля целостности данных.

Это не совсем так (см. п. 1.).
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Структура таблиц с данными
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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