[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проектирование ИМ
Страницы: 1, 2
dr.nomore
Нет товароведов.

Цитата
Казалось бы все отлично и можно поделить аттрибуты на категории, относящиеся к какому либо товару. Но! Как посчитать количество оставшихся футболок красного цвета, размера M на складе?


По-вашему получается вот так

abstract class t_shirt {}

class color extends t_shirt {}

class size extends t_shirt {}

и так далее.

В итоге 1 артикул будет использован для множества сущностей. Вы никогда не сведете нормальный баланс, потому что белая майка будет включать красную майку, а майка размером 30 будет включать майку размером 29.

Короче, с каких пор красная майка стала атрибутом белой или серой майки - или какую вы считаете там наиболее абстрактой. Может быть у вас и размер есть абстрактный? Ну, типа, вообще размер.

В общем баркод на красной майке будет _НЕ ТАКОЙ_ как на серой майке, на майке размером 56 будет _НЕ ТАКОЙ_ баркод как на майке размером 45 и так далее по всем "атрибутам".

У ТС синдром отравления абстракцией.
dr.nomore
Антидот - звонок или поход на склад. Там ТСу все и расскажут насчет устройства его всех трех БД.
dr.nomore
Материально делается так. Эти все "атрибуты" суть справочники с которыми есть 1 простое отношение.

create table Продукт (
Код_продукта int usingned auto_increment primary key,
Наименование varchar(255) not null,
Размер smallint unsigned not null,
Код_цвета int unsigned,
Код_материала int unsigned not null
);

create table Цвет (
Код_цвета int unsigned,
Цвет varchar(64)
);


create table Материал (
Код_материала int unsigned,
Материал varchar(64)
);



Оператор добавляет в таблицу цветов - цветы и дает им название.
Оператор добавляет в таблицу материалов - название материалов.

Реализуем заданные отношения

select * from Продукт 
join Цвет using(Код_цвета)
join Материал using(Код_материала)
where Продукт.Наименование ='Футболка мужская';


Заметили что 'Футболка мужская' будет не нормально избыточной?

Потому что продукты должны иметь отношение к, например Ассортимент. Таблице которая такой же справочник. Переделываем под ассортимент

create table Ассортимент (
Код_ассортимента int unsigned auto_increment primary key,
Наименование varchar(255) not null
);

[
sql]create table Продукт (
Код_продукта int usingned auto_increment primary key,
Код_ассортимента int unsigned not null,
Размер smallint unsigned,
Код_цвета int unsigned not null,
Код_материала int unsigned not null
);


select * from Продукт
join Ассортимент using(Код_ассортимента)
join Цвет using(Код_цвета)
join Материал using(Код_материала)
where Ассортимент.Наименование ='Футболка мужская';



Все должно быть вот так просто. Потому что цвет и размер и материал не порождают отношений между продуктами (не может желтая футболка каким-то боком относиться к футболке 37-го размера), одновременно цвет, материал и размер не являются "атрибутами" которые можно вставить и вынуть, потому что это неотъемлемые сущности которые создают артикул.

Цвет, материал, фактура, размер - это индивидуальные признаки товара. Которые будучи перечислены подряд создают артикул - артикль - статью - название. Например "Футболка мужская, цвет красный, размер 56, материал хлопок". Но вы запаритесь с составными ключами, я только что проверил - нет сведений о том, чтобы кто-то их юзал. Составной ключ это почти вся таблица Продукт засунутая в

CONSTRAINT pk_Article PRIMARY KEY (Код_ассортимента, Размер, Код_цвета, Код_материала)


Поэтому составные ключи заменяют на обычное число, типа нашего ID:

Артикул int unsigned not null --- более 4 миллионов продуктов вас устроит?

Поле надо проиндексировать key(Артикул)

И только с возникновением потребности связать индивидуальные товары по каким-то надуманным признакам появляются отношения N:N

Может быть артикул тем же самым ID с A_I? Зависит от отношений со складом.

А вот Код_цвета очень даже может быть обычным rgb hex.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.