powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Правильно ли конструировать модель БД таким образом?
6 сообщений из 6, страница 1 из 1
Правильно ли конструировать модель БД таким образом?
    #39337113
kormot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день Товарищи!

У меня такой вопрос. Часто бывает необходимо хранить в базе такую схему:
В базе хранятся объекты, каждый объект какого-то типа. И тип не просто поле в таблице объекта, а отдельная таблица.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Table Type1 (
   id       SERIAL,
   typeName CHAR(16)
)

Table Object1 (
   id       SERIAL,
   type1ID  BIGINT UNSIGNED NOT NULL,
   FK(type1ID) -> Type1(id)
)


В этих объектах, в зависимости от типа, могут быть разные подобъекты (только 1 уровень вложенности, никакого дерева).
Эти подобъекты тоже имеют типы, и у каждого типа объекта1 могут быть подобъекты определённых типов.
Т.е. есть таблица типов2 и связь между тем, какие типы2 могут быть для каждого типа1 :
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Table Type2 (
   id       SERIAL,
   typeName CHAR(16)
)

Table type1_2 (
   id       SERIAL,
   type1ID  BIGINT UNSIGNED NOT NULL,
   type2ID  BIGINT UNSIGNED NOT NULL,
   UNIQUE typeRel (type1ID, type2ID),
   FK(type1ID) -> Type1(id),
   FK(type2ID) -> Type2(id)
)


И соответственно таблица хранящая объекты2 :
Код: sql
1.
2.
3.
4.
5.
6.
7.
Table Object2 (
   id        SERIAL,
   type2ID   BIGINT UNSIGNED NOT NULL,
   object1ID BIGINT UNSIGNED NOT NULL,
   FK(type2ID) -> Type2(id),
   FK(object1ID) -> Object1(id)
)



Сразу скажу, объекты1 и объекты2 совершенно разные сущности, поэтому нельзя в одной таблице хранить и те и другие. В дальнейшем на них ссылаются разные внешние ключи из других таблиц.
Так вот что меня смущает: В таблице Объекты2 имеется некоторая возможная логическая ошибка, ссылка на родительский объект1 автоматически определяет набор доступных типов2 для элемента. Я конечно при добавлении объекта2 в таблицу проверяю чтобы тип2 был из числа доступных для типа родительского объекта, но какое-то нервирующее чуство изъяна не покидает меня в этой схеме. Какое-то закольцевание в этой схеме.
Скажите пожалуйста, корректно ли такое хранение для описанного случая? Или это стоит делать каким-то другим способом?
Повторюсь, что типы должны быть таблицами а не только полями у объекта.
И есть ли на уровне БД в MySQL возможность проверять при добавлении Объекта2 корректность указанного типа2 ?
...
Рейтинг: 0 / 0
Правильно ли конструировать модель БД таким образом?
    #39337119
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В описываемой схеме я не понимаю, почему указание, что тип2 является свойством тип1 , вывалено в отдельную таблицу. Или тип2 может быть подобъектом нескольких различных тип1 ?

Если так - рекомендую модифицировать схему. Тип1 сделать абстрактным, т.е. экземпляров такого объекта не существует, в нём только хранятся сведения о возможных для этого типа подобъектах. Включая и САМ ОБЪЕКТ. Т.е. создать экземпляр объекта тип2 , который собственно и хранит экземпляр сущности типа тип1 .

Это уведёт тебя от хранения объектов на двух уровнях структуры, что даст возможность отслеживать непротиворечивость штатными средствами.
...
Рейтинг: 0 / 0
Правильно ли конструировать модель БД таким образом?
    #39337120
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, с форматированием, ессссно, накосячил.
2Модератор: если будет несложно, замените теги кода на жирность.
...
Рейтинг: 0 / 0
Правильно ли конструировать модель БД таким образом?
    #39337122
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PS. Единственная проблема, которая у тебя останется - как отслеживать, что "куст" экземпляра тип1 содержит базовый экземпляр тип2 , причём строго один. Боюсь, штатные средства этого не позволят.
А при попытке ввести обратные линки ты опять вернёшься к "кольцу".
...
Рейтинг: 0 / 0
Правильно ли конструировать модель БД таким образом?
    #39337123
kormot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina спасибо за ответ!
Сейчас постараюсь осмыслить предложенное.
По поводу отдельной таблицы для тип2 , да у разных типов1 могут быть одни и те же типы2 .

Akina , я несколько раз перечитал твой пост, но не смог понять что сделать.
Где хранится связь объекта1 с объектом2 ?
...
Рейтинг: 0 / 0
Правильно ли конструировать модель БД таким образом?
    #39337360
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kormotГде хранится связь объекта1 с объектом2 Факт наличия такой связи или конкретный экземпляр Объект2 , являющийся "потомком" конкретного экземпляра Объект1 ?
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Правильно ли конструировать модель БД таким образом?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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