0 / 0 / 1
Регистрация: 09.02.2016
Сообщений: 22
|
|
1 | |
Проектирование БД. Добавление товаров с разными характеристиками09.02.2016, 15:14. Показов 4893. Ответов 6
Метки нет (Все метки)
Приветствую жителей форума!
Столкнулся с обычной проблемой проектирования магазинов, нужно добавить товар с разными характеристиками. Товарищи, я честно использовал метод профессиональных программистов - нагугливание. Да я нашел множество советов, но по все видимости их писали гуманитарии-философы. Поэтому хочу обратиться к вам! Магазин по продаже телефонов продает телефоны и карты памяти (в дальнейшем возможно расширение). Я дошел до следующего варианта (сокращенный) Схема данных В таблице tblProduct хранится общая инф. о товарах. В таблице tblMemoryCard хранятся данные о картах памяти. В таблице tblPhone хранятся данные о телефонах. В таблице tblSell хранится информация о продажах Логика: если в tblProduct поле MCardID<>null то это Карта памяти если в tblProduct поле PhoneID<>null то это телефон. С помощью форм контролирую добавление информации конкретном типе товара. Но я слышал, что нужно наоборот. В tblMemoryCard и tblPhone должно содержаться поле ProductID. Схема данных Но тогда не понятно как сделать запрос от таблицы tblSell. Добавить в tbProduct поле "Тип товара" и проверять его при запросе? -------- Товарищи, как правильно и почему? Спасибо за внимание!)
0
|
09.02.2016, 15:14 | |
Ответы с готовыми решениями:
6
БД товаров с разными валютами Сводка заказов товаров с разными ценам из текущего прайса Память с разными характеристиками Добавление в базу данных товаров, удаление товаров, редактирование товаров |
10.02.2016, 05:07 | 2 |
Сообщение было отмечено Кирсан как решение
Решение
Вижу ситуацию так.
1. ВидыТоваров (ид, Наименование)(Телефон, КартаПамяти, .. и т.п.) 2. СвойстваВидовТоваров (ид, ВидТовара_ид, Наименование, ...) 3. Товары (ид, Наменование, ВидТовара_ид, ...) 4. СвойстваТоваров (Товар_ид, СвойстваВидовТоваров_ид, ЗначениеСвойства, ...) (свойства товара определяются на основании вида товара. Можно вместо (или совместно) СвойстваВидовТоваров_ид хранить Наименование, тогда будет гибче в плане можно добавить сво-ва которого нет в виде товара) 5. Закупки (ид, ДатаВремя, Номер, ...) 6. ТоварыЗакупки (Закупки_ид, Товар_ид, Кол-во, Цена, ...) 7. Продажи (ид, ДатаВремя, Номер, ...) 8. ТоварыПродажи (Продажи_ид, Товар_ид, Кол-во, Цена, ...) 9. УстановкиЦен (ид, ДатаВремя, Номер, ...) 10. ТоварыУстановкиЦен (УстановкиЦен_ид, Товар_ид, Цена) ну и т.д. и т.п.
1
|
0 / 0 / 1
Регистрация: 09.02.2016
Сообщений: 22
|
|
10.02.2016, 16:32 [ТС] | 3 |
Bit_Man, Спасибо за развернутый ответ!
Мне нравится ваша идея опуститься до самого низкого уровня абстракции. Это действительно придает необычайную гибкость БД, но и возникаю проблемы. Например, в таблице СвойстваТоваров атрибут ЗначениеСвойства будет одного типа для всех данных, а ведь нужно хранить штрихкоды, дату изготовления, фото. Если вы подскажите как решить эту проблему, то это будет универсальным решением для любого магазина. Или я чего-то не понимаю?
0
|
11.02.2016, 03:34 | 4 |
Сообщение было отмечено Кирсан как решение
Решение
штирхкодирование в основном идет на товар, серию товара. Его можно вынести в таблицу Товары.
Эта некая метка, но не свойство, для быстрого поиска товара, серии. Тут многое зависит от клиентской части. Как вариант: ТипыДанных (ид, Наименование, ТипКомпонента (тип компонента клиентской части)) Добавить в СвойстваТоваров поле ТипДанных_ид. СвойстваВидоТоваров поле ЗначениеСвойства тип блоб. У меня что-то подобное, но храниться текст. В клиентской части по ТипКомпонента создается нужный компонент и заносится в него значение свойства. Если, кроме фото, больше бинарных данных не будет, то его тоже можно вынести в таблицу Товар.
1
|
0 / 0 / 1
Регистрация: 09.02.2016
Сообщений: 22
|
|
11.02.2016, 13:35 [ТС] | 5 |
Да согласен, это все можно вынести в Товары, оговорился.
Пользователям хочу максимально ограничить "творческий подход", поэтому некоторые свойства товара находятся в справочниках. Например, цвет, ОС, форм-фактор и тп., для каждого типа товара своя группа справочников. ->Задача сводится к хранению в текста, чисел и ид_Справочников. Т.е. будет например строка "42; Число; Целое(не>10)" И в клиентской части мы создаем компонент "целое число с условием не > 10" и записываем в него значение из поля ЗначениеСвойства. Я вас правильно понял? Здесь просто напрашивается вопрос: "Это повсеместная практика или это костыль?"
0
|
12.02.2016, 04:14 | 6 |
Сообщение было отмечено Кирсан как решение
Решение
Ну про условие я ничего не говорил, хотя идея хороша. Можно сделать проверку на стороне сервера через SQL. Или можно задавать значение свойства Компонента (но видимо это немного в другую сторону).
Пример: Строка табл. ТипыДанных (1, "Строка", "TEdit") Строка табл. СвойстваВидовТоваров (1(ид), 1(ВидТовара_ид), "Некое свойство"(Наименование)) Строка табл. СвойстваТоваров (1(Товар_ид), 1(СвойстваВидовТоваров_ид), "Некое значение свойства"(ЗначениеСвойства)) В проге на форме Товара по СвойствуТовара создается TLabel со значением заголовка = "Некое свойство" и создается компонент TEdit со значение текста = "Некое значение свойства" Добавлено через 10 минут Повсеместно это или нет, не могу тебе сказать. Были бы другие участники дискуссии, тогда можно было бы судить. Костылем не назвал бы Иногда приходится выкручиваться и создавать компоненты динамически. Решай сам, что лучше для тебя.
1
|
0 / 0 / 1
Регистрация: 09.02.2016
Сообщений: 22
|
|
12.02.2016, 08:49 [ТС] | 7 |
Спасибо за пример, разу так и подумал
Как понимаю, ваш подход заточен именно под онлайн-магазины с огромным разнообразием товаров. К сожалению, для моей скромной БД этот подход будет нерационален, но ваш подход мне импонирует, надеюсь в будущем мне попадется задачка, где я смогу его реализовать Спасибо, Bit_Man!
0
|
12.02.2016, 08:49 | |
12.02.2016, 08:49 | |
Помогаю со студенческими работами здесь
7
Будут ли стабильно работать два модуля оперативной памяти с одинаковыми характеристиками но с разными чипами? Добавление объектов в HashMap с разными методами Добавление товаров в корзину Добавление товаров в корзину php Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |