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


Товар классифицируется по Типу, и по Классу. И Тип, и Класс классифицируются Видом продукции.
Тип продукции и Класс продукции - независимы. Поэтому разные сущности.

В для сущности Товар - Тип и Класс должны относиться к одному Виду...
...торможу что-то, как правильно описать... как на рисунке - не нравится...

С новым Годом!
...
Рейтинг: 0 / 0
Двойная классификация...торможу
    #35742875
Q
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q
Гость
А что именно не нравится? В зависимости от конкретных хотелок тут возможна как денормализация вводом атрибута "вид" в товар, так и выделение вспомогательной сущности "КлассоТип" :)
...
Рейтинг: 0 / 0
Двойная классификация...торможу
    #35742886
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Q, хочется на уровне средств сервера обеспечить невозможность назначение Товару значения Типа, относящегося к Виду, отличному от того, которому соответствует Класс...
...
Может, действительно ввести атрибут Вид в Товар?
...
Получится через мутные триггеры...или как?
...
Рейтинг: 0 / 0
Двойная классификация...торможу
    #35743084
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NextManQ, хочется на уровне средств сервера обеспечить невозможность назначение Товару значения Типа, относящегося к Виду, отличному от того, которому соответствует Класс...
У меня недавно был точно такой же случай... думал, думал, вконец добавил в таблицу Товар еще два поля, назовем их Check_Tip_vid_id и Check_Class_vid_id, которые заполняются триггерами при инсерте/апдейте и еще есть констрейнт проверяющий что их значения равны друг другу.
Тяжеловесно, но ничего лучше не придумал.
...
Рейтинг: 0 / 0
Двойная классификация...торможу
    #35743105
Denis V.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NextMan,

я так понял, что вид определяется и типом и классом, а товар, в свою очередь, видом. Или нет?
...
Рейтинг: 0 / 0
Двойная классификация...торможу
    #35743153
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NextManТовар классифицируется по Типу, и по Классу. И Тип, и Класс классифицируются Видом продукции.
Тип продукции и Класс продукции - независимы. Поэтому разные сущности.

В для сущности Товар - Тип и Класс должны относиться к одному Виду...NextManТовар классифицируется по Типу, и по Классу. И Тип, и Класс классифицируются Видом продукции.
Тип продукции и Класс продукции - независимы. Поэтому разные сущности.
И чем такой вариант не устраивает ?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
CREATE TABLE "Вид продукции" (
	ID int PRIMARY KEY
	, Name varchar( 10 )
)
CREATE TABLE "Тип товара" (
	ID int PRIMARY KEY
	, vID int REFERENCES "Вид продукции"(ID)
	, Name varchar( 10 )
	, UNIQUE(vID, ID)
)
CREATE TABLE "Класс товара" (
	ID int PRIMARY KEY
	, vID int REFERENCES "Вид продукции"(ID)
	, Name varchar( 10 )
	, UNIQUE(vID, ID)
)
CREATE TABLE "Товар" (
	ID int PRIMARY KEY
	, vID int 
	, tID int 
	, cID int 
	, Name varchar( 10 )
	, FOREIGN KEY (vID, tID) REFERENCES "Тип товара" (vID,ID)
	, FOREIGN KEY (vID, cID) REFERENCES "Класс товара" (vID,ID)
)
Насколько понимаю, это похоже на первый вариант этого поста . Хотя он выглядит несколько избыточным, но только потому, что избегаете составных ключей. Если бы ID, в таблицах "Тип товара" и "Класс товара", были уникальными только в пределах класса, то это была бы вполне естественная схема, без проявления какой бы то ни было денормализации. Можно притвориться, что всё так и есть, а уникальность идентификаторов типа и класса считать дополнительным бонусом :) В обмен получаете контроль ссылочной целостности средствами СУБД.
Второй предложенный вариант , с промежуточной таблицей "КлассоТип", в которой будут зафиксированы сочетания классов и типов товаров, на мой взгляд, несколько экзотичен и не менее избыточен, чем первый. Да и логика модификации данных в таком варианте будет несколько сложнее. Возможно, такой вариант имеет право на жизнь в каких-либо ситуациях, но в данном случае, я бы его избегал.
Еще один вариант, это добавить CHECK CONSTRAINT к таблице "Товар", в котором с помощью функции проверялись бы совпадение видов для типов и классов. Не то чтобы он сильно плох, но мне кажется, что было бы правильнее, если бы контроль ссылочной целостности проходил всё-таки с использованием FOREIGN KEY, а не CHECK.
...
Рейтинг: 0 / 0
Двойная классификация...торможу
    #35743524
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Denis V., нет. Еще раз. Тип и Класс определяется Видом, а товар - ими (Типом и Классом) обоими. Причем, в рамках одного Товара Тип и Класс должны относиться к одному Виду.

2 ChA. Понятно. А по какой логике модифицировать (редактировать) связи таблички Товар с табличками Тип и Класс?
Или менять принадлежность конкретных записей Тип и Класс к другому Виду? Изменю отношение Типа и, если этот Тип использоваатлся в како-либо Товаре, сразу же FK-ограничения выстрелят, и будет мне головная боль...
...или сделать значения FK-полей "Null enabled", что тоже не есть гут...

Пожалуй, что тут действительно лучше КлассоТип вводить...
...
Рейтинг: 0 / 0
Двойная классификация...торможу
    #35743867
Фотография Dinamo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NextMan2 Denis V., нет. Еще раз. Тип и Класс определяется Видом, а товар - ими (Типом и Классом) обоими. Причем, в рамках одного Товара Тип и Класс должны относиться к одному Виду.

Исходя из первоначально представленной информации Denis V. Все верно нарисовал. Что вы и подтверждаете фразами: "Тип и Класс определяется Видом", "Тип и Класс должны относиться к одному Виду". Анализируфя вашу задачу получается что вид - это уникальные сочетания типа и класса. Соответственно предложена привязка товара к виду получаете привязку к "типу" и "классу".
Или нужно перефразировать первоначальную постановку, более четко описать на примере, приведя примеры сочетаний разных значений: типов, классов, видов.
Например:
Товар 1, Тип 1, Класс 1, Вид 1.
Товар 2, Тип 1, Класс 2, Вид 2.
и т.п.
Приведите пример необходимых и достаточных условий для однозначного определения для товара: типа, класса и вида.
...
Рейтинг: 0 / 0
Двойная классификация...торможу
    #35743967
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NextManА по какой логике модифицировать (редактировать) связи таблички Товар с табличками Тип и Класс?Возможно не понимаю проблемы. Зачем и как Вы собираетесь редактировать связи ? Чтобы изменить принадлежность товара к другому типу или классу просто меняете его на другое, подходящее по виду. Можете одновременно поменять тип и класс, один UPDATE, естественно с совпадением вида товара.

NextManИли менять принадлежность конкретных записей Тип и Класс к другому Виду?
Изменю отношение Типа и, если этот Тип использоваатлся в како-либо Товаре, сразу же FK-ограничения выстрелят, и будет мне головная боль...Так, собственно, ради этого схема и предлагалась, чтобы обеспечить ограничения стандартными механизмами СУБД. Для товара невозможно поменять вид только у типа или только класса, только одновременно(они же должны принадлежать одному и тому же виду). Поэтому очевидна следующая логика:
Создается новый тип, относящийся к другому виду.

Если не существует соответствующего класса такого же вида, то он тоже создается.

Изменяются одновременно, одним UPDATE, все три соответствующих поля в таблице товаров

Если старый тип старого вида более не нужен, то он удаляется.

Если старый класс старого вида более не нужен, то он удаляется.
Естественно, все эти операции рекомендуется делать единой транзакцией.

NextManПожалуй, что тут действительно лучше КлассоТип вводить...Тут получаем типичную ситуацию многозначной зависимости, т.е., нарушения 4НФ. Вы будете вынуждены делать групповые операции, охватывающие все комбинации данного типа с его классами, а то один и тот же тип будет принадлежать, как минимум, к паре видов и, как минимум, один класс "переедет" с типом в новый вид и также может сработать нарушение FK. При смене вида класса история аналогична, но уже относительно типа. В общем, этот путь, в данной ситуации, IMHO, глубоко порочен. Прежде чем пойти по нему, просто прикиньте все ситуации, может даже стоит обрисовать их на бумаге. Увидите, что не всё так радужно, как могло показаться с первого взгляда.
...
Рейтинг: 0 / 0
Двойная классификация...торможу
    #35744484
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ChA: да, пожалуй, ваша схема с составным внешним ключом будет наиболее удобна.
Спасибо.
...
Рейтинг: 0 / 0
Двойная классификация...торможу
    #35745520
RodionAT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NextManБлин, вот схема данных заказчика.


Товар классифицируется по Типу, и по Классу. И Тип, и Класс классифицируются Видом продукции.
Тип продукции и Класс продукции - независимы. Поэтому разные сущности.

В для сущности Товар - Тип и Класс должны относиться к одному Виду...
...торможу что-то, как правильно описать... как на рисунке - не нравится...

С новым Годом!
Не понятно - какие связи (1-1 или 1-много)
Но так как острия стрелок замыкаются на Виде продукции, то лучше поля КодКлассТовара и КодТипТовара ввести в таблицу ВидПродукции, а потом уже с правой таблицей и связывать через КодВидПродукции.

Хотя задача не понятна, пояснть бы!
...
Рейтинг: 0 / 0
Двойная классификация...торможу
    #35746317
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RodionAT
Не понятно - какие связи (1-1 или 1-много)
Э...а схема?
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Двойная классификация...торможу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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