Гость
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / общая нумерация всех объектов БД разного типа / 25 сообщений из 28, страница 1 из 2
13.06.2018, 07:43
    #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
13.06.2018, 07:54
    #39659979
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
общая нумерация всех объектов БД разного типа
Я вам не Димон.,

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

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

Я тебя поздравляю. Ты изобрел "Layer Supertype Pattern" .
...
Рейтинг: 0 / 0
13.06.2018, 09:21
    #39660032
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
общая нумерация всех объектов БД разного типа
Я вам не Димон., а зачем?
Какие задачи решаем?
Упростится ли при данном подходе выборка?
Ускорится вставка или удаление?
Подход достаточно известный и достаточно специфичный, чтобы повсеместно его применять.
...
Рейтинг: 0 / 0
13.06.2018, 09:41
    #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
13.06.2018, 09:58
    #39660060
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
общая нумерация всех объектов БД разного типа
skyANAЯ вам не Димон.,

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

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

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

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

skyANAНо вот только обычно разделяют субъекты учёта: контрагенты (юр. лица), пользователи (физ. лица), - и документы: заказы, накладные...
То есть выделяют T_Subjects и T_Documents .
От объектной модели зависит - потенциально выделение общего корневого типа имеет плюсы, хотя на практике чаще игра не стоит свеч.
...
Рейтинг: 0 / 0
13.06.2018, 11:46
    #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
13.06.2018, 12:12
    #39660179
d7i
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
13.06.2018, 12:49
    #39660222
d7i
d7i
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
общая нумерация всех объектов БД разного типа
Добавлю ещё от себя, что всё вышеизложенное - старый ржавый велосипед.
Я на таком гонял ещё в прошлом веке на Clipper...
Очень печально, что нынче новички в проектировании БД не изучают велосипедов, а сразу пытаются
рулить гоночными машинами. Чисто ИМХО.
...
Рейтинг: 0 / 0
13.06.2018, 13:14
    #39660240
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
общая нумерация всех объектов БД разного типа
d7i, а, теперь понял. По сути SubjectsTypes - это теги для сущности, по которым удобно фильтровать.
...
Рейтинг: 0 / 0
13.06.2018, 14:04
    #39660293
d7i
d7i
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
общая нумерация всех объектов БД разного типа
Не только фильтровать, а составлять на их основе VIEW.
Например, "Все блокированные клиенты", "Виртуальные места хранения" и т.п.

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

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

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

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

а

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

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

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

а

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

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

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

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

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

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


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

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

skyANAНо вот только обычно разделяют субъекты учёта: контрагенты (юр. лица), пользователи (физ. лица), - и документы: заказы, накладные...
То есть выделяют T_Subjects и T_Documents .
От объектной модели зависит - потенциально выделение общего корневого типа имеет плюсы, хотя на практике чаще игра не стоит свеч.
Практика она у всех разная. Моя подсказывает, что игра вполне себе стоит свеч
...
Рейтинг: 0 / 0
13.06.2018, 23:35
    #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]