Как я могу структурировать таблицу, чтобы поле оставалось атомарным?

У меня есть корзина для покупок, в которой я должен отслеживать акции, и это включает в себя запасы с атрибутами. Например:

shirt
 -- blue, small  = 50
 -- blue, medium = 22
 -- blue, large  = 53
 -- red,  small  = 15
 etc...

Эти поля в настоящее время разделены запятыми в базе данных, а идентификаторы будут следующими:

1,3
1,4
1,5
2,3

где каждое число представляет собой конкретный атрибут (1 = синий, 3 = маленький). Проблема в том, что с этим становится очень сложно работать, поскольку данные не являются атомарными в базе данных, но я не могу представить, как структурировать таблицу, так как может быть бесконечное множество комбинаций элементов, таких как:

blue, small, long-sleeved

Может ли кто-нибудь предложить лучший способ хранения этой информации в базе данных? Я думал об использовании таблиц поиска, но это не сработало бы из-за различного количества атрибутов.

php,mysql,database-design,shopping-cart,atomic-values,

1

Ответов: 2


4 принят

Таблица: Shirt {shirt_id}

Таблица: ShirtAttributeDefinitions {attribute_id, attribute_description}

Таблица: ShirtAttribute {shirt_id, attribute_id}

таким образом, вы можете продолжать определять новые ShirtAttributes, добавляя записи в таблицу: ShirtAttributeDefinitions.

Пример:

у вас есть две рубашки: {shirt_id: 1}, {shirt_id: 2}

у вас есть пять атрибутов рубашки: {attribute_id: 1, attribute_description: blue}, {attribute_id: 2, attribute_description: small}, {attribute_id: 3, attribute_description: ladies}, {attribute_id: 4, attribute_description: red}, {attribute_id: 5 , attribute_description: men}

Теперь ваша первая рубашка - синяя маленькая женская рубашка, а вторая - красная мужская рубашка. Таким образом, ваша таблица ShirtAttribute будет иметь эти повторы:

{shirt_id: 1, attribute_id: 1}, {shirt_id: 1, attribute_id: 2}, {shirt_id: 1, attribute_id: 3}, {shirt_id: 2, attribute_id: 4}, {shirt_id: 2, attribute_id: 5}

Хотя этот подход работает, лучше всего сделать эти поля атрибутов таблицы Shirt. Таким образом, вы можете убедиться, что рубашка не имеет атрибутов «мужчин» и «дам». Этот метод является лишь грязным подходом, который строго соответствует вашему вопросу.

JRH.


1

что случилось с таблицей атрибутов?

create table Attributes (
    Id int not null identity etc,
    CartItemId int not null foreign-key etc,
    Name nvarchar(32),
    Value nvarchar(32)
)

?

PHP, MySQL, базы данных дизайн, корзины покупок, атомные значения,
Похожие вопросы