2009-04-13 8 views
3

Как сохранить и получить в базе данных SQLite несколько значений для одной и той же строки того же столбца?SQLite - сохранение нескольких значений

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

Product: iLamp; 
Stores: River's; McWay; Lonnie's; ... 

Как я могу осуществить это?

Заранее спасибо.

ответ

4

, как уже упоминалось, вы можете сохранить его как запятую строку, а затем положить, что в вашей базе данных, но, как ocdecio упоминается, как вы теперь ваши столы плохие. Вам следует подумать о том, чтобы сделать что-то вроде добавления другой таблицы, например таблицы PRODUCT_TO_STORE, которая имеет два столбца, у одного есть ключ продукта, а в другом столбце есть ключ к хранилищу. Тогда есть связь между продуктами и магазинами и помогает нормализовать ваши данные, что в большинстве случаев является хорошей вещью. Затем, когда вам нужно найти все магазины, в которых находится продукт, вы можете просто выполнить запрос в этой таблице PRODUCT_TO_STORE.

2

Я бы использовал что-то простое, как JSON. Однако это плохой дизайн db, поскольку он не нормализуется.

1

Либо магазин как разделенный запятыми список для каждого магазина или добавить несколько строк один для каждой пары «магазин» -Продукт».

+0

И как использовать несколько строк? –

+0

Как обычно.SELECT с условием сравнения будет извлекать набор строк, и вы можете их проанализировать. UPDATE и DELETE выполняются аналогичным образом. – sharptooth

7

Если вы умны, вы не это сделать. Потому что когда приходит время выяснить, какие магазины запасают предмет, ваши запросы будут отвратительно деформированы, так же как и те из ваших приложений управления запасами, когда они попытаются вставить и удалить магазины. То, что вы получите, - это то, что мне нравится SQL-гимнастика, тратя все больше и больше времени на попытку сделать SQL самым причудливым способом, просто из-за плохого выбора дизайна.

Серьезно, храните их в разных строках базы данных, как Кодд предназначена.

Это намного проще (и быстрее с точки зрения использования СУБД) объединить несколько строк в одну строку с разделителями с запятой, чем разбивать эту строку на элементы.

Схема, такие как это было бы достаточно:

Products: 
    ProdCode integer primary key 
    ProdDesc varchar(50) 
Stores: 
    StoreCode integer primary key 
    StoreDesc varchar(50) 
StockLevels: 
    StoreCode integer \ 
    ProdCode integer/primary key 
    Count  integer 
1

изменить схему.

не хранить несколько значений в столбце той же строки.

добавить новую таблицу, где несколько значений могут быть сохранены в их собственных рядах

плохой стол Deisgn:
родители:

ParentID, values, other columns 

хороший дизайн таблицы:
родитель

parentID, other columns 

ребенок

parentID, childID, value 
Смежные вопросы