powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / общая нумерация всех объектов БД разного типа
25 сообщений из 28, страница 1 из 2
общая нумерация всех объектов БД разного типа
    #39659974
Всем привет! Хочу предложить такой тип организации данных.
В БД есть таблицы, отражающие содержание сущностей реального мира, например
T_Counter_Agents - контрагенты,
T_Users - пользователи,
T_Orders - заказы,
T_Order_Details - позиции заказов
и так далее, в общем куча таблиц.
Основная идея такая:
Есть универсальная таблица T_Objects ( id_object INTEGER PK Авто-инкремент )
и любая создаваемая в БД сущность обязательно получает id_object из этой таблицы, т.е. объекты разного типа получают идентификатор из одной и той же последовательности.

Хотелось бы узнать, может кто работал с такой структурой данных?
Какие плюсы-минусы можете описать?

В T_Objects можно также добавить поле type_object varchar - где будет указан тип объекта
(ссылающийся на справочник типов T_Object_Types ).

С помощью такой структуры можно создавать таблицы, являющиеся общими одновременно для всех сущностей, например
T_Main_Properties
(
id_object INTEGER -- Идентификатор объекта
date_create DATETIME -- Дата создания
note VARCHAR -- Примечание
id_user_creator VARCHAR -- Юзер, создавший объект
is_active BOOLEAN -- Флаг активности
и т.д.
)

то есть не надо будет для каждой таблицы создавать общие для всех сущностей атрибуты, такие как: дата создания, примечание и т.д.,
а все общие атрибуты будут храниться в общей таблице T_Main_Properties.
...
Рейтинг: 0 / 0
общая нумерация всех объектов БД разного типа
    #39659979
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вам не Димон.,

хотелось бы увидеть запрос даты создания заказа по его номеру.
...
Рейтинг: 0 / 0
общая нумерация всех объектов БД разного типа
    #39659981
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вам не Димон.,

и таблица объектов БД уже создана для Вас:
https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-objects-transact-sql
...
Рейтинг: 0 / 0
общая нумерация всех объектов БД разного типа
    #39659997
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вам не Димон.,

Я тебя поздравляю. Ты изобрел "Layer Supertype Pattern" .
...
Рейтинг: 0 / 0
общая нумерация всех объектов БД разного типа
    #39660032
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вам не Димон., а зачем?
Какие задачи решаем?
Упростится ли при данном подходе выборка?
Ускорится вставка или удаление?
Подход достаточно известный и достаточно специфичный, чтобы повсеместно его применять.
...
Рейтинг: 0 / 0
общая нумерация всех объектов БД разного типа
    #39660043
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAи таблица объектов БД уже создана для Вас:
https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-objects-transact-sql Верно говорят, аналог sysobjects делать не нужно.
Ещё можно сделать так .

fkthatТы изобрел "Layer Supertype Pattern" .Наконец-то, я узнал, как это называется.
...
Рейтинг: 0 / 0
общая нумерация всех объектов БД разного типа
    #39660060
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAЯ вам не Димон.,

и таблица объектов БД уже создана для Вас:
https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-objects-transact-sql
Это именно таблица объектов БД, а не объектов предметной области, как предлагает ТС. Например, по Вашему примеру там будет 1 запись на таблицу "Заказы". А у ТС-а - по одной записи на каждый заказ.
...
Рейтинг: 0 / 0
общая нумерация всех объектов БД разного типа
    #39660068
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вам не Димон.то есть не надо будет для каждой таблицы создавать общие для всех сущностей атрибуты, такие как: дата создания, примечание и т.д.,
а все общие атрибуты будут храниться в общей таблице T_Main_Properties.

можно ещё кучу всяких таблиц насоздавать.

что вы собираетесь выиграть от такой организации данных?
...
Рейтинг: 0 / 0
общая нумерация всех объектов БД разного типа
    #39660070
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tunknownЕщё можно сделать так .

ага, скажем, давай досвидания контроль ссылочной целостности.
...
Рейтинг: 0 / 0
общая нумерация всех объектов БД разного типа
    #39660101
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинskyANAЯ вам не Димон.,

и таблица объектов БД уже создана для Вас:
https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-objects-transact-sql
Это именно таблица объектов БД, а не объектов предметной области, как предлагает ТС. Например, по Вашему примеру там будет 1 запись на таблицу "Заказы". А у ТС-а - по одной записи на каждый заказ.
А, дак это тупо наследование.

Тогда таблица T_Main_Properties на фиг не нужна.
А T_Objects я бы назвал T_Subjects (субъекты учёта в терминах предметной области) и туда бы запихал все общие атрибуты.

Ну и создал бы представления типа V_Counter_Agents :
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE VIEW V_Counter_Agents
AS
SELECT A.Id, A.Name,
       S.Created, S.Creator, S.Note
FROM   T_Counter_Agents  A
JOIN   T_Subjects        S
    ON S.Id            = A.Id
AND    S.Is_Active     = 1


Подходу сто лет в обед. Схема снежинки.
...
Рейтинг: 0 / 0
общая нумерация всех объектов БД разного типа
    #39660108
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но вот только обычно разделяют субъекты учёта: контрагенты (юр. лица), пользователи (физ. лица), - и документы: заказы, накладные...
То есть выделяют T_Subjects и T_Documents .
...
Рейтинг: 0 / 0
общая нумерация всех объектов БД разного типа
    #39660112
d7i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю как на счет сущностей (объектов), но некоторая иерархия в нужных пределах бывает полезна.
Я, к примеру, использую множества субъектов.
Т.е. одна таблица субъектов (поля id,name). И к ней таблица подмножеств (+таблица типов подмножеств).
Подмножества, например, такие: клиенты, поставщики, места хранения, пользователи, персонал, блокированные, отмеченные,
виртуальные и т.д. и т.п.
Любой субъект может входить в любое подмножество.
Например, блокированный виртуальный клиент (субъект входит в три подмножества).
Таблица подмножеств может расширяться до бесконечности.
Таким образом, три таблицы (субъекты, типы подмножеств и подмножества) обеспечивают
бесконечное разнообразие субъектов с разными атрибутами.
...
Рейтинг: 0 / 0
общая нумерация всех объектов БД разного типа
    #39660125
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAПодходу сто лет в обед
Дык опаньки :)

skyANAНо вот только обычно разделяют субъекты учёта: контрагенты (юр. лица), пользователи (физ. лица), - и документы: заказы, накладные...
То есть выделяют T_Subjects и T_Documents .
От объектной модели зависит - потенциально выделение общего корневого типа имеет плюсы, хотя на практике чаще игра не стоит свеч.
...
Рейтинг: 0 / 0
общая нумерация всех объектов БД разного типа
    #39660160
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d7iНе знаю как на счет сущностей (объектов), но некоторая иерархия в нужных пределах бывает полезна.
Я, к примеру, использую множества субъектов.
Т.е. одна таблица субъектов (поля id,name). И к ней таблица подмножеств (+таблица типов подмножеств).
Подмножества, например, такие: клиенты, поставщики, места хранения, пользователи, персонал, блокированные, отмеченные,
виртуальные и т.д. и т.п.
Любой субъект может входить в любое подмножество.
Например, блокированный виртуальный клиент (субъект входит в три подмножества).
Таблица подмножеств может расширяться до бесконечности.
Таким образом, три таблицы (субъекты, типы подмножеств и подмножества) обеспечивают
бесконечное разнообразие субъектов с разными атрибутами.

Я понял, что есть 2 таблицы:

Субъекты
entities: (id, name, type_id),

Типы Субъектов
entity_types: (id, name)

и остальные Таблицы:
Клиенты(entity_id, att1, att2, att3)
Товары(entity_id, att1, att2, att3)

Я все правильно понял?
...
Рейтинг: 0 / 0
общая нумерация всех объектов БД разного типа
    #39660179
d7i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверин, немного не так:

Subjects(id,name)
SubjectsTypes(id,name)
SubType(subject_id,subjectType_id) -> ссылки на SubJects и SubjectsTypes

Subjects:
------------
1,Иванов
2,Склад
3,Колобок

SubjectsTypes:
-----------------
1,Клиент
2,Блокированный
3,Зеленый в крапинку

SubType:
-----------
1,1
1,2
3,1
3,3

Итого имеем:
----------------
SubType(1,1;1,2) - Клиент Иванов блокированный
SubType(3,1;3,3) - Клиент Колобок зеленый в крапинку

Ну и т.д.
...
Рейтинг: 0 / 0
общая нумерация всех объектов БД разного типа
    #39660222
d7i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавлю ещё от себя, что всё вышеизложенное - старый ржавый велосипед.
Я на таком гонял ещё в прошлом веке на Clipper...
Очень печально, что нынче новички в проектировании БД не изучают велосипедов, а сразу пытаются
рулить гоночными машинами. Чисто ИМХО.
...
Рейтинг: 0 / 0
общая нумерация всех объектов БД разного типа
    #39660240
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d7i, а, теперь понял. По сути SubjectsTypes - это теги для сущности, по которым удобно фильтровать.
...
Рейтинг: 0 / 0
общая нумерация всех объектов БД разного типа
    #39660293
d7i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не только фильтровать, а составлять на их основе VIEW.
Например, "Все блокированные клиенты", "Виртуальные места хранения" и т.п.

Кстати, чтобы не пользоваться непонятными цифровыми идентификаторами,
в таблицу SubjectsType можно добавить символьное поле code с названиями подмножеств.
Например,

1,Клиент,Client
2,Место хранения,Place
3,Блокированный,Blocked

Тогда можно будет писать не

...WHERE SubjectType_id=3 // и вспоминай потом что такое 3 ?

а

...WHERE code='Blocked' // понятное название подмножества

Это элементарные велосипедные детали.
...
Рейтинг: 0 / 0
общая нумерация всех объектов БД разного типа
    #39660312
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d7iТогда можно будет писать не

...WHERE SubjectType_id=3 // и вспоминай потом что такое 3 ?

а

...WHERE code='Blocked' // понятное название подмножества

Это элементарные велосипедные детали.

Способы проектирования БД с упором на удобство построения ручных запросов обречены на вымирание. Ну кого парит одни и те же поля, дублирующиеся в каждой таблице, если их генерит ORM? Или запросы строятся бизнес-логикой, и совершенное пофигу что там 3 или Blocked, 3 даже предпочтительней, так как меньше.
...
Рейтинг: 0 / 0
общая нумерация всех объектов БД разного типа
    #39660332
d7i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt, пока ИИ всех заменит "роса очи выест".
Конечно, мечтать не вредно.
Разрушительный эффект "кремлевского мечтателя" до сих пор расхлебать не можем.
...
Рейтинг: 0 / 0
общая нумерация всех объектов БД разного типа
    #39660496
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d7ihVostt, пока ИИ всех заменит "роса очи выест".
Конечно, мечтать не вредно.
Разрушительный эффект "кремлевского мечтателя" до сих пор расхлебать не можем.

А я не с позиции мечтателя говорю. Ещё 10 лет получал первые работающие в эксплуатации решения, с генерацией БД из схем, моделей и кода.

Ну а если 10 лет не срок для кого-то. Ну подождём, чё уж. Многие до сих пор работают по книжкам 10-15 летней давности. Некоторые из них и правда до сих пор актуальны, но я продолжаю встречать ребят, мыслящих натуральными ключами и т.д. и т.п.
...
Рейтинг: 0 / 0
общая нумерация всех объектов БД разного типа
    #39660502
d7i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt, это всё чудесно, пока не приходится разбираться в коде и править его вручную.
Вот тогда загадки типа " ...WHERE FIELD_238=24" становятся весьма актуальными.
В конце-концов, всякие генераторы БД пишут ведь тоже пока люди, а не роботы.
Так что учиться нужно всем - и людям и роботам. И всем нужна практика.
Я просто изложил небольшой практический совет для новичков.
И только.
...
Рейтинг: 0 / 0
общая нумерация всех объектов БД разного типа
    #39660514
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d7iВот тогда загадки типа " ...WHERE FIELD_238=24" становятся весьма актуальными.

Ну и какой смысл отлаживать генерённый код? Отлаживать надо генератор, писать юнит-тесты, прогонять, инструмент должен уметь делать трассировку. Что такого-то.


d7iВ конце-концов, всякие генераторы БД пишут ведь тоже пока люди, а не роботы.
Так что учиться нужно всем - и людям и роботам. И всем нужна практика.
Я просто изложил небольшой практический совет для новичков.
И только.

Ок.
...
Рейтинг: 0 / 0
общая нумерация всех объектов БД разного типа
    #39660533
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинskyANAПодходу сто лет в обед
Дык опаньки :)

skyANAНо вот только обычно разделяют субъекты учёта: контрагенты (юр. лица), пользователи (физ. лица), - и документы: заказы, накладные...
То есть выделяют T_Subjects и T_Documents .
От объектной модели зависит - потенциально выделение общего корневого типа имеет плюсы, хотя на практике чаще игра не стоит свеч.
Практика она у всех разная. Моя подсказывает, что игра вполне себе стоит свеч
...
Рейтинг: 0 / 0
общая нумерация всех объектов БД разного типа
    #39660542
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAМатроскинskyANAНо вот только обычно разделяют субъекты учёта: контрагенты (юр. лица), пользователи (физ. лица), - и документы: заказы, накладные...
То есть выделяют T_Subjects и T_Documents.

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

Ээ, Вы вроде только что говорили что корневая таблица T_object не нужна (а нужны 2 более специализированные).
А теперь - единая корневая таки стоит свеч?
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / общая нумерация всех объектов БД разного типа
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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