powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Является-ли Количество отдельной сущностью
25 сообщений из 37, страница 1 из 2
Является-ли Количество отдельной сущностью
    #35480071
вопрос1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется сущность Товар, обладающая атрибутом ЕдиницаИзмерения

Код: plaintext
Товар(ID int, Название varchar( 100 ), Поставщик int, Количество int, ЕдиницаИзмерения int)

(Единицаизмерения имеет FK на таблицу с допустимыми названиями единиц измерения)

Вроде как имеется нарушение 3НФ, т.к. Единица измерения характеризует Количество, а не сам товар.

однако какой смысл в вынесении ее в отдельную сущность ? Каких именно аномалий можно избежать, если сделать так

Код: plaintext
1.
Товар(ID int, Название varchar( 100 ), Поставщик int, Количество int)
Количество(ID int, количество int, ЕдиницаИзмерения int)

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

Товар = хлеб, кол. = 5, ед.изм = шт
и
Товар = Книги, кол. = 5, ед. изм. = шт

все равно будет 2 отдельные записи, т.е. аномалий изменения данный не может произойти ?
...
Рейтинг: 0 / 0
Является-ли Количество отдельной сущностью
    #35480167
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрос1Что-то не вижу, чем это решение лучше
Оно не лучше, оно хуже. Нарушения 3НФ здесь нет, поскольку "характеризует" никак к ЗНФ не относится. Практически "это решение" - это разбиение одной таблицы на две, связанных один к одному. Что с теоретической точки зрения не дает никаких выгод (практические иногда можно усмотреть) но зато обеспечивает геморрой поддержки реального соответствия записей в таблицах.
...
Рейтинг: 0 / 0
Является-ли Количество отдельной сущностью
    #35480211
вопрос1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer
Нарушения 3НФ здесь нет, поскольку "характеризует" никак к ЗНФ не относится.

Сущность не соответствует 3НФ, если неключевой атрибут определяется другим неключевым атрибутом
Т.е. неключевые атрибуты не могут описывать неключевые атрибуты, а ЕдиницаИзмерения описывает Количество, разве нет ?
...
Рейтинг: 0 / 0
Является-ли Количество отдельной сущностью
    #35480395
apapacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я Вам рекомендую заполнить в Excel или OpenOfficeCalc табличку с тестовыми данными строк на 20. А потом почитать учебник.
...
Рейтинг: 0 / 0
Является-ли Количество отдельной сущностью
    #35480478
вопрос1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
apapacyЯ Вам рекомендую заполнить в Excel или OpenOfficeCalc табличку с тестовыми данными строк на 20. А потом почитать учебник.
Уважаемый, если вам нечего сказать по теме, просьба не загрязнять топик бессмысленными замечаниями
...
Рейтинг: 0 / 0
Является-ли Количество отдельной сущностью
    #35480498
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрос1 Сущность не соответствует 3НФ, если неключевой атрибут определяется другим неключевым атрибутом
Т.е. неключевые атрибуты не могут описывать неключевые атрибуты, а ЕдиницаИзмерения описывает Количество, разве нет ?Вообще говоря, нет. Вот если бы для ЕдиницыИзмерения "шт" у Вас однозначно следовало бы Количество = 3, то тогда да. Проблемы могут возникнуть в случае, если для разных ЕдиницИзмерения нужно задавать Количество по разному (использовать другой тип измерения, нечисловой к примеру). Тогда стоит подумать о декомпозиции, только таблиц получится побольше (вроде бы, не проверял).
...
Рейтинг: 0 / 0
Является-ли Количество отдельной сущностью
    #35480514
вопрос1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Павел ВоронцовВообще говоря, нет. Вот если бы для ЕдиницыИзмерения "шт" у Вас однозначно следовало бы Количество = 3, то тогда да. Проблемы могут возникнуть в случае, если для разных ЕдиницИзмерения нужно задавать Количество по разному (использовать другой тип измерения, нечисловой к примеру).
вообще-то так и есть :) Штукам будут соответствовать int, а тоннам или килограммам - decimal ...
...
Рейтинг: 0 / 0
Является-ли Количество отдельной сущностью
    #35480528
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрос1вообще-то так и есть :) Штукам будут соответствовать int, а тоннам или килограммам - decimal ...int и decimal - это не страшно. Такое можно контролировать и на уровне приложения (к примеру). Заморачиваться в данном случае с декомпозицией по-моему не стоит. Хуже было бы, если там строковые значения или даты встречались.
...
Рейтинг: 0 / 0
Является-ли Количество отдельной сущностью
    #35480558
вопрос1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Павел Воронцовint и decimal - это не страшно. Такое можно контролировать и на уровне приложения (к примеру). Заморачиваться в данном случае с декомпозицией по-моему не стоит. Хуже было бы, если там строковые значения или даты встречались.
ну все-таки значение 2.756 шт книг будет выглядеть нехорошо, и может даже рассматриваться как нарушение целостности.
А как собственно декомпозиция решит эти проблемы ?
...
Рейтинг: 0 / 0
Является-ли Количество отдельной сущностью
    #35480641
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрос1А как собственно декомпозиция решит эти проблемы ?Например так:
Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
create tabel good(
id int not null,
name varchar( 200 ) not null,
customer_id int not null,
constraint good_pk primary key (id),
constraint good_fk foreign key (customer_id) references customer (id));
create table good_measure(
id int not null,
measure_type char( 1 ) not null,
name varchar( 10 ) not null,
constraint mg_pk primary key (id),
constraint mg_chk check (measure_type in ('I','D')),
constraint mg_uk unique (id, measure_type));
create table good_quantity(
good_id int not null,
measure_id int not null,
measure_type char( 1 ) not null,
constraint gq_pk primary key (good_id),
constraint gq_chk check (measure_type in ('I','D')),
constraint gq_fk1 foreign key (good_id) references good (id),
constraint gq_fk2 foreign key (measure_id, measure_type) references good_measure (id, measure_type),
constraint gq_uk unique (good_id, measure_id, measure_type));
create table good_quantity_int(
good_id int not null,
measure_id int not null,
measure_type char( 1 ) not null,
quantity int not null,
constraint gqi_pk primary key (good_id),
constraint gqi_fk foreign key (good_id, measure_id, measure_type) references good_quantity (good_id, measure_id, measure_type),
constraint gq_chk check (measure_type = 'I'));
create table good_quantity_dec(
good_id int not null,
measure_id int not null,
measure_type char( 1 ) not null,
quantity decimal( 10 , 3 ) not null,
constraint gqi_pk primary key (good_id),
constraint gqi_fk foreign key (good_id, measure_id, measure_type) references good_quantity (good_id, measure_id, measure_type),
constraint gq_chk check (measure_type = 'D'));
А теперь хорошенько подумайте: а оно вам надо, такое строгое разделение? Ведь все равно потом придется городить представление, в котором выводятся товары с количеством и измерениями. Как оно будет выглядеть, нарисуйте.
...
Рейтинг: 0 / 0
Является-ли Количество отдельной сущностью
    #35480646
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имена констрейнтов там конечно повторяться не должны, это копи-пейст. Ну да разберетесь поди.
...
Рейтинг: 0 / 0
Является-ли Количество отдельной сущностью
    #35480718
xbz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Товар(ID int, Название varchar(100), Поставщик int, Количество int, ЕдиницаИзмерения int)
не совсем ясно зачем вводиться ID, если ID это ключ по которому можно одназначно найти название то было бы вернее сделать:
Товар(ID int, Название varchar(100))
ТоварПоставщик(ID int, Поставщик int, Количество int, ЕдиницаИзмерения int)
Ибо у одного названия может быть много поставщиков как и наоборот
...
Рейтинг: 0 / 0
Является-ли Количество отдельной сущностью
    #35480721
вопрос1Имеется сущность Товар, обладающая атрибутом ЕдиницаИзмерения

Код: plaintext
Товар(ID int, Название varchar( 100 ), Поставщик int, Количество int, ЕдиницаИзмерения int)

Вроде как имеется нарушение 3НФ, т.к. Единица измерения характеризует Количество, а не сам товар.


А почему, собственно, Вы решили, что ЕдИзм характеризует не Товар, а Количество? Как раз, по-моему, именно Товар как сущность и характеризуется Единицей Измерения (ведь не будете же Вы мерить сукно литрами, а водку - метрами)!
...
Рейтинг: 0 / 0
Является-ли Количество отдельной сущностью
    #35480724
xbz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зы. забыл добавить при таком подходе как советую я сделать потом свойства товара добавлять проще
...
Рейтинг: 0 / 0
Является-ли Количество отдельной сущностью
    #35481009
Hibernate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СтарыйЧайникА почему, собственно, Вы решили, что ЕдИзм характеризует не Товар, а Количество? Как раз, по-моему, именно Товар как сущность и характеризуется Единицей Измерения (ведь не будете же Вы мерить сукно литрами, а водку - метрами)!
ну, насколько я понимаю, ту-же водку можно мерить литрами, бутылками (разной емкости), ящиками, бочками, стаканами, на крайний случай ;-).
...
Рейтинг: 0 / 0
Является-ли Количество отдельной сущностью
    #35481036
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hibernateну, насколько я понимаю, ту-же водку можно мерить литрами, бутылками (разной емкости), ящиками, бочками, стаканами, на крайний случай ;-).бульками еще.
...
Рейтинг: 0 / 0
Является-ли Количество отдельной сущностью
    #35481093
вопрос1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Павел ВоронцовА теперь хорошенько подумайте: а оно вам надо, такое строгое разделение?
не знаю, нужно подумать :) В общем-то, смысл определенный все-таки в подобном разделении кажется есть ...

СтарыйЧайникА почему, собственно, Вы решили, что ЕдИзм характеризует не Товар, а Количество? Как раз, по-моему, именно Товар как сущность и характеризуется Единицей Измерения (ведь не будете же Вы мерить сукно литрами, а водку - метрами)

Имхо нет. Вот к примеру возьмем другой пример - цена товара в разных валютах. Например автомобиль Toyota может иметь цену 6000$ или 140000 руб. Очевидно, что вид валюты характеризует количество денег, а ни как не саму тойоту :)
...
Рейтинг: 0 / 0
Является-ли Количество отдельной сущностью
    #35481102
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hibernate СтарыйЧайникА почему, собственно, Вы решили, что ЕдИзм характеризует не Товар, а Количество? Как раз, по-моему, именно Товар как сущность и характеризуется Единицей Измерения (ведь не будете же Вы мерить сукно литрами, а водку - метрами)!
ну, насколько я понимаю, ту-же водку можно мерить литрами, бутылками (разной емкости), ящиками, бочками, стаканами, на крайний случай ;-).
В итоге номенклатура характеризуется очень небольшим конечным перечнем ЕИ и производными от них. Но к количеству это вообще никакого отношения не имеет.
...
Рейтинг: 0 / 0
Является-ли Количество отдельной сущностью
    #35481105
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрос1Имхо нет. Вот к примеру возьмем другой пример - цена товара в разных валютах. Например автомобиль Toyota может иметь цену 6000$ или 140000 руб. Очевидно, что вид валюты характеризует количество денег, а ни как не саму тойоту :)
Вы совсем запутались.
...
Рейтинг: 0 / 0
Является-ли Количество отдельной сущностью
    #35481208
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрос1Имхо нет. Вот к примеру возьмем другой пример - цена товара в разных валютах. Например автомобиль Toyota может иметь цену 6000$ или 140000 руб. Очевидно, что вид валюты характеризует количество денег, а ни как не саму тойоту :)Мнэээ.... Это уже совсем другое. Количество товара и его цена в разных валютах - вещи.... ээээ... сильно разные. То, что структуры данных в результате могут получиться похожие - не повод считать эти два атрибута товара одинаковыми. Подумайте об этом.
...
Рейтинг: 0 / 0
Является-ли Количество отдельной сущностью
    #35481324
вопрос1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Павел ВоронцовМнэээ.... Это уже совсем другое. Количество товара и его цена в разных валютах - вещи.... ээээ... сильно разные. То, что структуры данных в результате могут получиться похожие - не повод считать эти два атрибута товара одинаковыми. Подумайте об этом.
почему разные ? Как единица измерения характеризует количество сущностей, так и валюта характеризует количество денег.
А можете более формально обьяснить, почему все-таки единица измерения (валюта) является характеристикой сущности, а не количества ?
А то на мой взгляд, это все-таки характеристика количества. Можно сказать, что сущность (напр. лоток с хлебом) характеризуется некоторой другой сущностью Количество, которая имеет такие характеристики как число и что именно это число обозначает ...
...
Рейтинг: 0 / 0
Является-ли Количество отдельной сущностью
    #35481345
вопрос1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
например в ООП как раз рекомендуется выносить это в отдельную сущность (К. Ларман) -
...
Рейтинг: 0 / 0
Является-ли Количество отдельной сущностью
    #35481377
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрос1А можете более формально обьяснить, почему все-таки единица измерения (валюта) является характеристикой сущности, а не количества ?
А то на мой взгляд, это все-таки характеристика количества. Можно сказать, что сущность (напр. лоток с хлебом) характеризуется некоторой другой сущностью Количество, которая имеет такие характеристики как число и что именно это число обозначает ...А Вы сами и ответили на вопрос. Единица измерения обычно является характеристикой именно сущности, то есть характерезует то, что хранится. В данном бизнес-контексте водку измеряют ящиками, доски - кубометрами, а сахар - килограммами. В другом бизнес-контексте - по другому (литры, штуки, мешки к примеру). Но как правило этот атрибут однозначно привязан к сущности и не меняется. Пересчитывать мешки на килограммы не обязательно. Стоимость же в разных валютах - это связанные измерения, их необходимо как правило пересчитывать из одних единиц в другие "на лету", причем с привлечением доп. информации о текущем курсе и пр. То есть в данном случае как раз единица измерения является характеристикой количества, а не сущности. Мне кажется, что и в случае мультивалютного учета будет более правильным хранить все цены в одной валюте и проводить преобразования только в случае крайней необходимости. Реализовывать серьезные системы с мультивалютностью не приходилось, Бог миловал... )
...
Рейтинг: 0 / 0
Является-ли Количество отдельной сущностью
    #35481380
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрос1например в ООП как раз рекомендуется выносить это в отдельную сущность
Не в сущность (в реляционном смысле сущности). Для количества по-хорошему нужен свой домен, свой тип данных; "количество" и "единица измерения количества" - это не два независимых атрибута, а один составной атрибут. В ООП такое понятие моделируется объектом, являющимся членом другого объекта. В СУБД, если она поддерживает объекты или пользовательские типы, можно сделать так же.

Однако, это не означает, что при отсутствии других вариантов "составной атрибут" надо выносить в отдельную таблицу. Это означает, что надо моделировать такую ситуацию именно что двумя атрибутами. Проиллюстрировать это проще всего так: как мы понимаем, в декларациях

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 type 
  TQnt =  record 
    Qnt, Measure: integer;
   end ;

  TMyData1 =  record 
    .....
    Goods: TQnt;
    .....
   end ;

  TMyData2 =  record 
    .....
    Goods_Qnt, Goods_Measure: integer;
    .....
   end ;

TMyData1 и TMyData2 отличаются исключительно синтаксисом доступа, но ложатся в те же самые байты и обрабатываются тем же самым бинарно кодом. Так и здесь - если синтаксис БД не дает применить первый вариант, пользуемся вторым.
...
Рейтинг: 0 / 0
Является-ли Количество отдельной сущностью
    #35481405
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрос1почему разные ? Как единица измерения характеризует количество сущностей, так и валюта характеризует количество денег.Если сильно не отвлекатся от примера топикстартера, то количество было бы зависимым от единицы измерения(ЕИ), если бы в любом другом кортеже этой таблице той же самой ЕИ соответствовало бы то же самое количество или наличествовала бы четкая функциональная связь ЕИ->Количество и по ЕИ можно было бы вычислить Количество. Но фактически этой связи на самом деле нет и по данной таблице вы вряд ли сможете ее обнаружить. Таким образом, можно смело считать, что количество и ЕИ на самом деле зависят только от ключа - "Товар.ID".

P.S. Я бы даже рискнул сказать, что в данном случае имеет место факт, что данного товара есть (определенное количество в заданных единицах измерения). Т.е., ЕИ и Кол следовало бы рассматривать как один, но составной атрибут. Впрочем, это уже повод для другого обсуждения, IMHO.
...
Рейтинг: 0 / 0
25 сообщений из 37, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Является-ли Количество отдельной сущностью
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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