Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Проектирование БД Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 общая нумерация всех объектов БД разного типа  [new]
Я вам не Димон.
Member

Откуда:
Сообщений: 46
Всем привет! Хочу предложить такой тип организации данных.
В БД есть таблицы, отражающие содержание сущностей реального мира, например
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.
13 июн 18, 07:43    [21487224]     Ответить | Цитировать Сообщить модератору
 Re: общая нумерация всех объектов БД разного типа  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 24872
Я вам не Димон.,

хотелось бы увидеть запрос даты создания заказа по его номеру.
13 июн 18, 07:54    [21487236]     Ответить | Цитировать Сообщить модератору
 Re: общая нумерация всех объектов БД разного типа  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 24872
Я вам не Димон.,

и таблица объектов БД уже создана для Вас:
https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-objects-transact-sql
13 июн 18, 07:58    [21487240]     Ответить | Цитировать Сообщить модератору
 Re: общая нумерация всех объектов БД разного типа  [new]
fkthat
Member

Откуда:
Сообщений: 103
Я вам не Димон.,

Я тебя поздравляю. Ты изобрел "Layer Supertype Pattern".
13 июн 18, 08:20    [21487267]     Ответить | Цитировать Сообщить модератору
 Re: общая нумерация всех объектов БД разного типа  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 4076
Я вам не Димон., а зачем?
Какие задачи решаем?
Упростится ли при данном подходе выборка?
Ускорится вставка или удаление?
Подход достаточно известный и достаточно специфичный, чтобы повсеместно его применять.
13 июн 18, 09:21    [21487355]     Ответить | Цитировать Сообщить модератору
 Re: общая нумерация всех объектов БД разного типа  [new]
tunknown
Member

Откуда:
Сообщений: 491
skyANA
и таблица объектов БД уже создана для Вас:
https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-objects-transact-sql
Верно говорят, аналог sysobjects делать не нужно.
Ещё можно сделать так.

fkthat
Ты изобрел "Layer Supertype Pattern".
Наконец-то, я узнал, как это называется.
13 июн 18, 09:41    [21487391]     Ответить | Цитировать Сообщить модератору
 Re: общая нумерация всех объектов БД разного типа  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8110
skyANA
Я вам не Димон.,

и таблица объектов БД уже создана для Вас:
https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-objects-transact-sql

Это именно таблица объектов БД, а не объектов предметной области, как предлагает ТС. Например, по Вашему примеру там будет 1 запись на таблицу "Заказы". А у ТС-а - по одной записи на каждый заказ.
13 июн 18, 09:58    [21487428]     Ответить | Цитировать Сообщить модератору
 Re: общая нумерация всех объектов БД разного типа  [new]
hVostt
Member

Откуда:
Сообщений: 14395
Я вам не Димон.
то есть не надо будет для каждой таблицы создавать общие для всех сущностей атрибуты, такие как: дата создания, примечание и т.д.,
а все общие атрибуты будут храниться в общей таблице T_Main_Properties.


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

что вы собираетесь выиграть от такой организации данных?
13 июн 18, 10:05    [21487446]     Ответить | Цитировать Сообщить модератору
 Re: общая нумерация всех объектов БД разного типа  [new]
hVostt
Member

Откуда:
Сообщений: 14395
tunknown
Ещё можно сделать так.


ага, скажем, давай досвидания контроль ссылочной целостности.
13 июн 18, 10:06    [21487451]     Ответить | Цитировать Сообщить модератору
 Re: общая нумерация всех объектов БД разного типа  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 24872
Кот Матроскин
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:
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

Подходу сто лет в обед. Схема снежинки.
13 июн 18, 10:44    [21487607]     Ответить | Цитировать Сообщить модератору
 Re: общая нумерация всех объектов БД разного типа  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 24872
Но вот только обычно разделяют субъекты учёта: контрагенты (юр. лица), пользователи (физ. лица), - и документы: заказы, накладные...
То есть выделяют T_Subjects и T_Documents.
13 июн 18, 10:49    [21487629]     Ответить | Цитировать Сообщить модератору
 Re: общая нумерация всех объектов БД разного типа  [new]
d7i
Member

Откуда:
Сообщений: 346
Не знаю как на счет сущностей (объектов), но некоторая иерархия в нужных пределах бывает полезна.
Я, к примеру, использую множества субъектов.
Т.е. одна таблица субъектов (поля id,name). И к ней таблица подмножеств (+таблица типов подмножеств).
Подмножества, например, такие: клиенты, поставщики, места хранения, пользователи, персонал, блокированные, отмеченные,
виртуальные и т.д. и т.п.
Любой субъект может входить в любое подмножество.
Например, блокированный виртуальный клиент (субъект входит в три подмножества).
Таблица подмножеств может расширяться до бесконечности.
Таким образом, три таблицы (субъекты, типы подмножеств и подмножества) обеспечивают
бесконечное разнообразие субъектов с разными атрибутами.
13 июн 18, 10:52    [21487641]     Ответить | Цитировать Сообщить модератору
 Re: общая нумерация всех объектов БД разного типа  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8110
skyANA
Подходу сто лет в обед

Дык опаньки :)

skyANA
Но вот только обычно разделяют субъекты учёта: контрагенты (юр. лица), пользователи (физ. лица), - и документы: заказы, накладные...
То есть выделяют T_Subjects и T_Documents.

От объектной модели зависит - потенциально выделение общего корневого типа имеет плюсы, хотя на практике чаще игра не стоит свеч.
13 июн 18, 11:09    [21487697]     Ответить | Цитировать Сообщить модератору
 Re: общая нумерация всех объектов БД разного типа  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 4076
d7i
Не знаю как на счет сущностей (объектов), но некоторая иерархия в нужных пределах бывает полезна.
Я, к примеру, использую множества субъектов.
Т.е. одна таблица субъектов (поля id,name). И к ней таблица подмножеств (+таблица типов подмножеств).
Подмножества, например, такие: клиенты, поставщики, места хранения, пользователи, персонал, блокированные, отмеченные,
виртуальные и т.д. и т.п.
Любой субъект может входить в любое подмножество.
Например, блокированный виртуальный клиент (субъект входит в три подмножества).
Таблица подмножеств может расширяться до бесконечности.
Таким образом, три таблицы (субъекты, типы подмножеств и подмножества) обеспечивают
бесконечное разнообразие субъектов с разными атрибутами.


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

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

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

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

Я все правильно понял?
13 июн 18, 11:46    [21487806]     Ответить | Цитировать Сообщить модератору
 Re: общая нумерация всех объектов БД разного типа  [new]
d7i
Member

Откуда:
Сообщений: 346
Озверин, немного не так:

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) - Клиент Колобок зеленый в крапинку

Ну и т.д.
13 июн 18, 12:12    [21487875]     Ответить | Цитировать Сообщить модератору
 Re: общая нумерация всех объектов БД разного типа  [new]
d7i
Member

Откуда:
Сообщений: 346
Добавлю ещё от себя, что всё вышеизложенное - старый ржавый велосипед.
Я на таком гонял ещё в прошлом веке на Clipper...
Очень печально, что нынче новички в проектировании БД не изучают велосипедов, а сразу пытаются
рулить гоночными машинами. Чисто ИМХО.
13 июн 18, 12:49    [21488088]     Ответить | Цитировать Сообщить модератору
 Re: общая нумерация всех объектов БД разного типа  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 4076
d7i, а, теперь понял. По сути SubjectsTypes - это теги для сущности, по которым удобно фильтровать.
13 июн 18, 13:14    [21488149]     Ответить | Цитировать Сообщить модератору
 Re: общая нумерация всех объектов БД разного типа  [new]
d7i
Member

Откуда:
Сообщений: 346
Не только фильтровать, а составлять на их основе VIEW.
Например, "Все блокированные клиенты", "Виртуальные места хранения" и т.п.

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

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

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

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

а

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

Это элементарные велосипедные детали.
13 июн 18, 14:04    [21488361]     Ответить | Цитировать Сообщить модератору
 Re: общая нумерация всех объектов БД разного типа  [new]
hVostt
Member

Откуда:
Сообщений: 14395
d7i
Тогда можно будет писать не

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

а

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

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


Способы проектирования БД с упором на удобство построения ручных запросов обречены на вымирание. Ну кого парит одни и те же поля, дублирующиеся в каждой таблице, если их генерит ORM? Или запросы строятся бизнес-логикой, и совершенное пофигу что там 3 или Blocked, 3 даже предпочтительней, так как меньше.
13 июн 18, 14:22    [21488445]     Ответить | Цитировать Сообщить модератору
 Re: общая нумерация всех объектов БД разного типа  [new]
d7i
Member

Откуда:
Сообщений: 346
hVostt, пока ИИ всех заменит "роса очи выест".
Конечно, мечтать не вредно.
Разрушительный эффект "кремлевского мечтателя" до сих пор расхлебать не можем.
13 июн 18, 14:48    [21488556]     Ответить | Цитировать Сообщить модератору
 Re: общая нумерация всех объектов БД разного типа  [new]
hVostt
Member

Откуда:
Сообщений: 14395
d7i
hVostt, пока ИИ всех заменит "роса очи выест".
Конечно, мечтать не вредно.
Разрушительный эффект "кремлевского мечтателя" до сих пор расхлебать не можем.


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

Ну а если 10 лет не срок для кого-то. Ну подождём, чё уж. Многие до сих пор работают по книжкам 10-15 летней давности. Некоторые из них и правда до сих пор актуальны, но я продолжаю встречать ребят, мыслящих натуральными ключами и т.д. и т.п.
13 июн 18, 20:33    [21489461]     Ответить | Цитировать Сообщить модератору
 Re: общая нумерация всех объектов БД разного типа  [new]
d7i
Member

Откуда:
Сообщений: 346
hVostt, это всё чудесно, пока не приходится разбираться в коде и править его вручную.
Вот тогда загадки типа " ...WHERE FIELD_238=24" становятся весьма актуальными.
В конце-концов, всякие генераторы БД пишут ведь тоже пока люди, а не роботы.
Так что учиться нужно всем - и людям и роботам. И всем нужна практика.
Я просто изложил небольшой практический совет для новичков.
И только.
13 июн 18, 20:50    [21489492]     Ответить | Цитировать Сообщить модератору
 Re: общая нумерация всех объектов БД разного типа  [new]
hVostt
Member

Откуда:
Сообщений: 14395
d7i
Вот тогда загадки типа " ...WHERE FIELD_238=24" становятся весьма актуальными.


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


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


Ок.
13 июн 18, 21:36    [21489584]     Ответить | Цитировать Сообщить модератору
 Re: общая нумерация всех объектов БД разного типа  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 24872
Кот Матроскин
skyANA
Подходу сто лет в обед

Дык опаньки :)

skyANA
Но вот только обычно разделяют субъекты учёта: контрагенты (юр. лица), пользователи (физ. лица), - и документы: заказы, накладные...
То есть выделяют T_Subjects и T_Documents.

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

Практика она у всех разная. Моя подсказывает, что игра вполне себе стоит свеч
13 июн 18, 22:49    [21489690]     Ответить | Цитировать Сообщить модератору
 Re: общая нумерация всех объектов БД разного типа  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8110
skyANA
Матроскин
skyANA
Но вот только обычно разделяют субъекты учёта: контрагенты (юр. лица), пользователи (физ. лица), - и документы: заказы, накладные...
То есть выделяют T_Subjects и T_Documents.


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

Практика она у всех разная. Моя подсказывает, что игра вполне себе стоит свеч


Ээ, Вы вроде только что говорили что корневая таблица T_object не нужна (а нужны 2 более специализированные).
А теперь - единая корневая таки стоит свеч?
13 июн 18, 23:35    [21489743]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Проектирование БД Ответить