SQLite - хранение нескольких значений - PullRequest
3 голосов
/ 13 апреля 2009

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

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

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

Как я могу это реализовать?

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

Ответы [ 5 ]

7 голосов
/ 13 апреля 2009

Если вы умны, вы не будете делать это. Потому что, когда придет время выяснить, в каких магазинах хранится товар, ваши запросы будут ужасно искажены. То же самое будет и с вашими приложениями по управлению запасами, когда они попытаются вставить и удалить магазины. То, что вы в итоге получите, это то, что мне нравится называть гимнастикой 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
4 голосов
/ 13 апреля 2009

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

2 голосов
/ 13 апреля 2009

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

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

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

плохой дизайн таблицы:
Родители:

ParentID, values, other columns

хороший дизайн стола:
Родитель

parentID, other columns

ребенок

parentID, childID, value
2 голосов
/ 13 апреля 2009

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

1 голос
/ 13 апреля 2009

Либо хранить в виде списка через запятую для каждого магазина, либо добавить несколько строк по одной для каждой пары "Магазин" -Продукт ".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...