|
общая нумерация всех объектов БД разного типа
|
|||
---|---|---|---|
#18+
Всем привет! Хочу предложить такой тип организации данных. В БД есть таблицы, отражающие содержание сущностей реального мира, например 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.06.2018, 07:43 |
|
общая нумерация всех объектов БД разного типа
|
|||
---|---|---|---|
#18+
Я вам не Димон., хотелось бы увидеть запрос даты создания заказа по его номеру. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2018, 07:54 |
|
общая нумерация всех объектов БД разного типа
|
|||
---|---|---|---|
#18+
Я вам не Димон., и таблица объектов БД уже создана для Вас: https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-objects-transact-sql ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2018, 07:58 |
|
общая нумерация всех объектов БД разного типа
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2018, 08:20 |
|
общая нумерация всех объектов БД разного типа
|
|||
---|---|---|---|
#18+
Я вам не Димон., а зачем? Какие задачи решаем? Упростится ли при данном подходе выборка? Ускорится вставка или удаление? Подход достаточно известный и достаточно специфичный, чтобы повсеместно его применять. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2018, 09:21 |
|
общая нумерация всех объектов БД разного типа
|
|||
---|---|---|---|
#18+
skyANAи таблица объектов БД уже создана для Вас: https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-objects-transact-sql Верно говорят, аналог sysobjects делать не нужно. Ещё можно сделать так . fkthatТы изобрел "Layer Supertype Pattern" .Наконец-то, я узнал, как это называется. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2018, 09:41 |
|
общая нумерация всех объектов БД разного типа
|
|||
---|---|---|---|
#18+
skyANAЯ вам не Димон., и таблица объектов БД уже создана для Вас: https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-objects-transact-sql Это именно таблица объектов БД, а не объектов предметной области, как предлагает ТС. Например, по Вашему примеру там будет 1 запись на таблицу "Заказы". А у ТС-а - по одной записи на каждый заказ. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2018, 09:58 |
|
общая нумерация всех объектов БД разного типа
|
|||
---|---|---|---|
#18+
Я вам не Димон.то есть не надо будет для каждой таблицы создавать общие для всех сущностей атрибуты, такие как: дата создания, примечание и т.д., а все общие атрибуты будут храниться в общей таблице T_Main_Properties. можно ещё кучу всяких таблиц насоздавать. что вы собираетесь выиграть от такой организации данных? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2018, 10:05 |
|
общая нумерация всех объектов БД разного типа
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2018, 10:06 |
|
общая нумерация всех объектов БД разного типа
|
|||
---|---|---|---|
#18+
Кот Матроскин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.
Подходу сто лет в обед. Схема снежинки. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2018, 10:44 |
|
общая нумерация всех объектов БД разного типа
|
|||
---|---|---|---|
#18+
Но вот только обычно разделяют субъекты учёта: контрагенты (юр. лица), пользователи (физ. лица), - и документы: заказы, накладные... То есть выделяют T_Subjects и T_Documents . ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2018, 10:49 |
|
общая нумерация всех объектов БД разного типа
|
|||
---|---|---|---|
#18+
Не знаю как на счет сущностей (объектов), но некоторая иерархия в нужных пределах бывает полезна. Я, к примеру, использую множества субъектов. Т.е. одна таблица субъектов (поля id,name). И к ней таблица подмножеств (+таблица типов подмножеств). Подмножества, например, такие: клиенты, поставщики, места хранения, пользователи, персонал, блокированные, отмеченные, виртуальные и т.д. и т.п. Любой субъект может входить в любое подмножество. Например, блокированный виртуальный клиент (субъект входит в три подмножества). Таблица подмножеств может расширяться до бесконечности. Таким образом, три таблицы (субъекты, типы подмножеств и подмножества) обеспечивают бесконечное разнообразие субъектов с разными атрибутами. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2018, 10:52 |
|
общая нумерация всех объектов БД разного типа
|
|||
---|---|---|---|
#18+
skyANAПодходу сто лет в обед Дык опаньки :) skyANAНо вот только обычно разделяют субъекты учёта: контрагенты (юр. лица), пользователи (физ. лица), - и документы: заказы, накладные... То есть выделяют T_Subjects и T_Documents . От объектной модели зависит - потенциально выделение общего корневого типа имеет плюсы, хотя на практике чаще игра не стоит свеч. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2018, 11:09 |
|
общая нумерация всех объектов БД разного типа
|
|||
---|---|---|---|
#18+
d7iНе знаю как на счет сущностей (объектов), но некоторая иерархия в нужных пределах бывает полезна. Я, к примеру, использую множества субъектов. Т.е. одна таблица субъектов (поля id,name). И к ней таблица подмножеств (+таблица типов подмножеств). Подмножества, например, такие: клиенты, поставщики, места хранения, пользователи, персонал, блокированные, отмеченные, виртуальные и т.д. и т.п. Любой субъект может входить в любое подмножество. Например, блокированный виртуальный клиент (субъект входит в три подмножества). Таблица подмножеств может расширяться до бесконечности. Таким образом, три таблицы (субъекты, типы подмножеств и подмножества) обеспечивают бесконечное разнообразие субъектов с разными атрибутами. Я понял, что есть 2 таблицы: Субъекты entities: (id, name, type_id), Типы Субъектов entity_types: (id, name) и остальные Таблицы: Клиенты(entity_id, att1, att2, att3) Товары(entity_id, att1, att2, att3) Я все правильно понял? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2018, 11:46 |
|
общая нумерация всех объектов БД разного типа
|
|||
---|---|---|---|
#18+
Озверин, немного не так: 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.06.2018, 12:12 |
|
общая нумерация всех объектов БД разного типа
|
|||
---|---|---|---|
#18+
Добавлю ещё от себя, что всё вышеизложенное - старый ржавый велосипед. Я на таком гонял ещё в прошлом веке на Clipper... Очень печально, что нынче новички в проектировании БД не изучают велосипедов, а сразу пытаются рулить гоночными машинами. Чисто ИМХО. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2018, 12:49 |
|
общая нумерация всех объектов БД разного типа
|
|||
---|---|---|---|
#18+
d7i, а, теперь понял. По сути SubjectsTypes - это теги для сущности, по которым удобно фильтровать. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2018, 13:14 |
|
общая нумерация всех объектов БД разного типа
|
|||
---|---|---|---|
#18+
Не только фильтровать, а составлять на их основе VIEW. Например, "Все блокированные клиенты", "Виртуальные места хранения" и т.п. Кстати, чтобы не пользоваться непонятными цифровыми идентификаторами, в таблицу SubjectsType можно добавить символьное поле code с названиями подмножеств. Например, 1,Клиент,Client 2,Место хранения,Place 3,Блокированный,Blocked Тогда можно будет писать не ...WHERE SubjectType_id=3 // и вспоминай потом что такое 3 ? а ...WHERE code='Blocked' // понятное название подмножества Это элементарные велосипедные детали. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2018, 14:04 |
|
общая нумерация всех объектов БД разного типа
|
|||
---|---|---|---|
#18+
d7iТогда можно будет писать не ...WHERE SubjectType_id=3 // и вспоминай потом что такое 3 ? а ...WHERE code='Blocked' // понятное название подмножества Это элементарные велосипедные детали. Способы проектирования БД с упором на удобство построения ручных запросов обречены на вымирание. Ну кого парит одни и те же поля, дублирующиеся в каждой таблице, если их генерит ORM? Или запросы строятся бизнес-логикой, и совершенное пофигу что там 3 или Blocked, 3 даже предпочтительней, так как меньше. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2018, 14:22 |
|
общая нумерация всех объектов БД разного типа
|
|||
---|---|---|---|
#18+
hVostt, пока ИИ всех заменит "роса очи выест". Конечно, мечтать не вредно. Разрушительный эффект "кремлевского мечтателя" до сих пор расхлебать не можем. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2018, 14:48 |
|
общая нумерация всех объектов БД разного типа
|
|||
---|---|---|---|
#18+
d7ihVostt, пока ИИ всех заменит "роса очи выест". Конечно, мечтать не вредно. Разрушительный эффект "кремлевского мечтателя" до сих пор расхлебать не можем. А я не с позиции мечтателя говорю. Ещё 10 лет получал первые работающие в эксплуатации решения, с генерацией БД из схем, моделей и кода. Ну а если 10 лет не срок для кого-то. Ну подождём, чё уж. Многие до сих пор работают по книжкам 10-15 летней давности. Некоторые из них и правда до сих пор актуальны, но я продолжаю встречать ребят, мыслящих натуральными ключами и т.д. и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2018, 20:33 |
|
общая нумерация всех объектов БД разного типа
|
|||
---|---|---|---|
#18+
hVostt, это всё чудесно, пока не приходится разбираться в коде и править его вручную. Вот тогда загадки типа " ...WHERE FIELD_238=24" становятся весьма актуальными. В конце-концов, всякие генераторы БД пишут ведь тоже пока люди, а не роботы. Так что учиться нужно всем - и людям и роботам. И всем нужна практика. Я просто изложил небольшой практический совет для новичков. И только. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2018, 20:50 |
|
общая нумерация всех объектов БД разного типа
|
|||
---|---|---|---|
#18+
d7iВот тогда загадки типа " ...WHERE FIELD_238=24" становятся весьма актуальными. Ну и какой смысл отлаживать генерённый код? Отлаживать надо генератор, писать юнит-тесты, прогонять, инструмент должен уметь делать трассировку. Что такого-то. d7iВ конце-концов, всякие генераторы БД пишут ведь тоже пока люди, а не роботы. Так что учиться нужно всем - и людям и роботам. И всем нужна практика. Я просто изложил небольшой практический совет для новичков. И только. Ок. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2018, 21:36 |
|
общая нумерация всех объектов БД разного типа
|
|||
---|---|---|---|
#18+
Кот МатроскинskyANAПодходу сто лет в обед Дык опаньки :) skyANAНо вот только обычно разделяют субъекты учёта: контрагенты (юр. лица), пользователи (физ. лица), - и документы: заказы, накладные... То есть выделяют T_Subjects и T_Documents . От объектной модели зависит - потенциально выделение общего корневого типа имеет плюсы, хотя на практике чаще игра не стоит свеч. Практика она у всех разная. Моя подсказывает, что игра вполне себе стоит свеч ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2018, 22:49 |
|
общая нумерация всех объектов БД разного типа
|
|||
---|---|---|---|
#18+
skyANAМатроскинskyANAНо вот только обычно разделяют субъекты учёта: контрагенты (юр. лица), пользователи (физ. лица), - и документы: заказы, накладные... То есть выделяют T_Subjects и T_Documents. От объектной модели зависит - потенциально выделение общего корневого типа имеет плюсы, хотя на практике чаще игра не стоит свеч. Практика она у всех разная. Моя подсказывает, что игра вполне себе стоит свеч Ээ, Вы вроде только что говорили что корневая таблица T_object не нужна (а нужны 2 более специализированные). А теперь - единая корневая таки стоит свеч? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2018, 23:35 |
|
|
start [/forum/topic.php?fid=32&msg=39660533&tid=1540031]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
152ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 279ms |
0 / 0 |