Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Является-ли Количество отдельной сущностью / 25 сообщений из 37, страница 1 из 2
10.08.2008, 10:35
    #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
10.08.2008, 14:26
    #35480167
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Является-ли Количество отдельной сущностью
вопрос1Что-то не вижу, чем это решение лучше
Оно не лучше, оно хуже. Нарушения 3НФ здесь нет, поскольку "характеризует" никак к ЗНФ не относится. Практически "это решение" - это разбиение одной таблицы на две, связанных один к одному. Что с теоретической точки зрения не дает никаких выгод (практические иногда можно усмотреть) но зато обеспечивает геморрой поддержки реального соответствия записей в таблицах.
...
Рейтинг: 0 / 0
10.08.2008, 16:12
    #35480211
вопрос1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Является-ли Количество отдельной сущностью
softwarer
Нарушения 3НФ здесь нет, поскольку "характеризует" никак к ЗНФ не относится.

Сущность не соответствует 3НФ, если неключевой атрибут определяется другим неключевым атрибутом
Т.е. неключевые атрибуты не могут описывать неключевые атрибуты, а ЕдиницаИзмерения описывает Количество, разве нет ?
...
Рейтинг: 0 / 0
11.08.2008, 00:04
    #35480395
apapacy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Является-ли Количество отдельной сущностью
Я Вам рекомендую заполнить в Excel или OpenOfficeCalc табличку с тестовыми данными строк на 20. А потом почитать учебник.
...
Рейтинг: 0 / 0
11.08.2008, 07:26
    #35480478
вопрос1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Является-ли Количество отдельной сущностью
apapacyЯ Вам рекомендую заполнить в Excel или OpenOfficeCalc табличку с тестовыми данными строк на 20. А потом почитать учебник.
Уважаемый, если вам нечего сказать по теме, просьба не загрязнять топик бессмысленными замечаниями
...
Рейтинг: 0 / 0
11.08.2008, 08:03
    #35480498
Павел Воронцов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Является-ли Количество отдельной сущностью
вопрос1 Сущность не соответствует 3НФ, если неключевой атрибут определяется другим неключевым атрибутом
Т.е. неключевые атрибуты не могут описывать неключевые атрибуты, а ЕдиницаИзмерения описывает Количество, разве нет ?Вообще говоря, нет. Вот если бы для ЕдиницыИзмерения "шт" у Вас однозначно следовало бы Количество = 3, то тогда да. Проблемы могут возникнуть в случае, если для разных ЕдиницИзмерения нужно задавать Количество по разному (использовать другой тип измерения, нечисловой к примеру). Тогда стоит подумать о декомпозиции, только таблиц получится побольше (вроде бы, не проверял).
...
Рейтинг: 0 / 0
11.08.2008, 08:41
    #35480514
вопрос1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Является-ли Количество отдельной сущностью
Павел ВоронцовВообще говоря, нет. Вот если бы для ЕдиницыИзмерения "шт" у Вас однозначно следовало бы Количество = 3, то тогда да. Проблемы могут возникнуть в случае, если для разных ЕдиницИзмерения нужно задавать Количество по разному (использовать другой тип измерения, нечисловой к примеру).
вообще-то так и есть :) Штукам будут соответствовать int, а тоннам или килограммам - decimal ...
...
Рейтинг: 0 / 0
11.08.2008, 08:52
    #35480528
Павел Воронцов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Является-ли Количество отдельной сущностью
вопрос1вообще-то так и есть :) Штукам будут соответствовать int, а тоннам или килограммам - decimal ...int и decimal - это не страшно. Такое можно контролировать и на уровне приложения (к примеру). Заморачиваться в данном случае с декомпозицией по-моему не стоит. Хуже было бы, если там строковые значения или даты встречались.
...
Рейтинг: 0 / 0
11.08.2008, 09:11
    #35480558
вопрос1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Является-ли Количество отдельной сущностью
Павел Воронцовint и decimal - это не страшно. Такое можно контролировать и на уровне приложения (к примеру). Заморачиваться в данном случае с декомпозицией по-моему не стоит. Хуже было бы, если там строковые значения или даты встречались.
ну все-таки значение 2.756 шт книг будет выглядеть нехорошо, и может даже рассматриваться как нарушение целостности.
А как собственно декомпозиция решит эти проблемы ?
...
Рейтинг: 0 / 0
11.08.2008, 10:00
    #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
11.08.2008, 10:05
    #35480646
Павел Воронцов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Является-ли Количество отдельной сущностью
Имена констрейнтов там конечно повторяться не должны, это копи-пейст. Ну да разберетесь поди.
...
Рейтинг: 0 / 0
11.08.2008, 10:37
    #35480718
xbz
xbz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Является-ли Количество отдельной сущностью
Товар(ID int, Название varchar(100), Поставщик int, Количество int, ЕдиницаИзмерения int)
не совсем ясно зачем вводиться ID, если ID это ключ по которому можно одназначно найти название то было бы вернее сделать:
Товар(ID int, Название varchar(100))
ТоварПоставщик(ID int, Поставщик int, Количество int, ЕдиницаИзмерения int)
Ибо у одного названия может быть много поставщиков как и наоборот
...
Рейтинг: 0 / 0
11.08.2008, 10:38
    #35480721
Является-ли Количество отдельной сущностью
вопрос1Имеется сущность Товар, обладающая атрибутом ЕдиницаИзмерения

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

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


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

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

Имхо нет. Вот к примеру возьмем другой пример - цена товара в разных валютах. Например автомобиль Toyota может иметь цену 6000$ или 140000 руб. Очевидно, что вид валюты характеризует количество денег, а ни как не саму тойоту :)
...
Рейтинг: 0 / 0
11.08.2008, 13:05
    #35481102
Сергей Васкецов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Является-ли Количество отдельной сущностью
Hibernate СтарыйЧайникА почему, собственно, Вы решили, что ЕдИзм характеризует не Товар, а Количество? Как раз, по-моему, именно Товар как сущность и характеризуется Единицей Измерения (ведь не будете же Вы мерить сукно литрами, а водку - метрами)!
ну, насколько я понимаю, ту-же водку можно мерить литрами, бутылками (разной емкости), ящиками, бочками, стаканами, на крайний случай ;-).
В итоге номенклатура характеризуется очень небольшим конечным перечнем ЕИ и производными от них. Но к количеству это вообще никакого отношения не имеет.
...
Рейтинг: 0 / 0
11.08.2008, 13:06
    #35481105
Сергей Васкецов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Является-ли Количество отдельной сущностью
вопрос1Имхо нет. Вот к примеру возьмем другой пример - цена товара в разных валютах. Например автомобиль Toyota может иметь цену 6000$ или 140000 руб. Очевидно, что вид валюты характеризует количество денег, а ни как не саму тойоту :)
Вы совсем запутались.
...
Рейтинг: 0 / 0
11.08.2008, 13:44
    #35481208
Павел Воронцов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Является-ли Количество отдельной сущностью
вопрос1Имхо нет. Вот к примеру возьмем другой пример - цена товара в разных валютах. Например автомобиль Toyota может иметь цену 6000$ или 140000 руб. Очевидно, что вид валюты характеризует количество денег, а ни как не саму тойоту :)Мнэээ.... Это уже совсем другое. Количество товара и его цена в разных валютах - вещи.... ээээ... сильно разные. То, что структуры данных в результате могут получиться похожие - не повод считать эти два атрибута товара одинаковыми. Подумайте об этом.
...
Рейтинг: 0 / 0
11.08.2008, 14:33
    #35481324
вопрос1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Является-ли Количество отдельной сущностью
Павел ВоронцовМнэээ.... Это уже совсем другое. Количество товара и его цена в разных валютах - вещи.... ээээ... сильно разные. То, что структуры данных в результате могут получиться похожие - не повод считать эти два атрибута товара одинаковыми. Подумайте об этом.
почему разные ? Как единица измерения характеризует количество сущностей, так и валюта характеризует количество денег.
А можете более формально обьяснить, почему все-таки единица измерения (валюта) является характеристикой сущности, а не количества ?
А то на мой взгляд, это все-таки характеристика количества. Можно сказать, что сущность (напр. лоток с хлебом) характеризуется некоторой другой сущностью Количество, которая имеет такие характеристики как число и что именно это число обозначает ...
...
Рейтинг: 0 / 0
11.08.2008, 14:40
    #35481345
вопрос1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Является-ли Количество отдельной сущностью
например в ООП как раз рекомендуется выносить это в отдельную сущность (К. Ларман) -
...
Рейтинг: 0 / 0
11.08.2008, 14:51
    #35481377
Павел Воронцов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Является-ли Количество отдельной сущностью
вопрос1А можете более формально обьяснить, почему все-таки единица измерения (валюта) является характеристикой сущности, а не количества ?
А то на мой взгляд, это все-таки характеристика количества. Можно сказать, что сущность (напр. лоток с хлебом) характеризуется некоторой другой сущностью Количество, которая имеет такие характеристики как число и что именно это число обозначает ...А Вы сами и ответили на вопрос. Единица измерения обычно является характеристикой именно сущности, то есть характерезует то, что хранится. В данном бизнес-контексте водку измеряют ящиками, доски - кубометрами, а сахар - килограммами. В другом бизнес-контексте - по другому (литры, штуки, мешки к примеру). Но как правило этот атрибут однозначно привязан к сущности и не меняется. Пересчитывать мешки на килограммы не обязательно. Стоимость же в разных валютах - это связанные измерения, их необходимо как правило пересчитывать из одних единиц в другие "на лету", причем с привлечением доп. информации о текущем курсе и пр. То есть в данном случае как раз единица измерения является характеристикой количества, а не сущности. Мне кажется, что и в случае мультивалютного учета будет более правильным хранить все цены в одной валюте и проводить преобразования только в случае крайней необходимости. Реализовывать серьезные системы с мультивалютностью не приходилось, Бог миловал... )
...
Рейтинг: 0 / 0
11.08.2008, 14:52
    #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
11.08.2008, 15:02
    #35481405
ChA
ChA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Является-ли Количество отдельной сущностью
вопрос1почему разные ? Как единица измерения характеризует количество сущностей, так и валюта характеризует количество денег.Если сильно не отвлекатся от примера топикстартера, то количество было бы зависимым от единицы измерения(ЕИ), если бы в любом другом кортеже этой таблице той же самой ЕИ соответствовало бы то же самое количество или наличествовала бы четкая функциональная связь ЕИ->Количество и по ЕИ можно было бы вычислить Количество. Но фактически этой связи на самом деле нет и по данной таблице вы вряд ли сможете ее обнаружить. Таким образом, можно смело считать, что количество и ЕИ на самом деле зависят только от ключа - "Товар.ID".

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


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