|
|
|
|
|
для: Trianon
(22.04.2010 в 17:36)
| | Огромное спасибо за помощь! Потихоньку утрясается и выстраивается структура. Пока рисую на бумаге. | |
|
|
|
|
|
|
|
для: baston
(22.04.2010 в 16:50)
| | пустую строку оно содержать не может - тип не даст.
не содержать ничего (быть NULL) - может. Но чтоб отыскать такие записи, придется делать полный перебор данных в таблице - индекс не спасет.
А 0 (или другой наперед фиксированный ключ) - решение. | |
|
|
|
|
|
|
|
для: Trianon
(22.04.2010 в 16:43)
| | Ага, начинаю доходить. Таким образом мое видение в последнем моем же ответе соотносится с вашими словами. Для общих продуктов ставим идентификатор, для остальных - id_user.
Спасибо. | |
|
|
|
|
|
|
|
для: baston
(22.04.2010 в 16:12)
| | Меня смущает в этой ситуации лишь один момент - наличие общих продуктов.
Действительно, можно организовать таблицу products таким образом, чтобы в ней были три основных столбца: id, name (имя продукта) и id_user (ID пользователя).
Тогда при добавлении нового продукта в поле id_user будет добавлен айди добавившего продукт пользователя. В этом случае и связка не нужна, а достаточно запроса, предложенного Трианоном.
Но я не могу понять, а что заносить в это поле для общих продуктов? Получается, что это поле не будет иметь обязательных значений и может содержать пустую строку, NULL или 0.
Спасибо. | |
|
|
|
|
|
|
|
для: baston
(22.04.2010 в 16:17)
| | Никаких пометок публичная/закрытая не требуется.
(если надо - поставьте пометку "видна/не видна хозяину", но это уже другая тема)
У записей в поле userid будет идентификатор-признак общего продукта.
Например, 0 . Или идентификатор администратора.
Формально это, конечно, несколько нарушает нормальную форму.
Но если Вы не собираетесь заводить группы пользователей-администраторов, либо делать продукты общими для определенных групп пользователей - такое решение представляется мне аккуратным компромиссом. | |
|
|
|
|
|
|
|
для: Trianon
(22.04.2010 в 16:04)
| | Вы предложили:
>PPS. Если еще чуть-чуть подумать, то окажется нелишним таки назначить общим данным конкретный userid.
>Чтобы вытаскивать строки по индексу: А не полным сканированием.
>
"SELECT ... WHERE userid = $public_id OR userid = $user_id"
|
Таким образом, правильно ли я понимаю, что нужно добавить в таблицу products поле с отметкой (публичная запись или закрытая)? А в таблицу-связки добавлять только новые значения для собственноручно добавленных продуктов?
Тогда при отображении таблицы для конкретного пользователя можно делать запросы из двух таблиц: products и таблицы-связки. | |
|
|
|
|
|
|
|
для: Trianon
(22.04.2010 в 16:04)
| | >Если хозяин у продукта только один - зачем связь многие-ко-многим?
>Достаточно чужого ключа, как я и предложил первым ответом.
Это было бы хорошо для того продукта, который добавляется конкретным пользователем - хозяином. Но ведь есть еще список общих продуктов, которые должны быть видны всем пользователям. | |
|
|
|
|
|
|
|
для: Trianon
(22.04.2010 в 16:05)
| | >2. Зачем id в таблице-связке?
Согласен, лишнее.
>3. Зачем всем пользователям вносить все продукты?
>Смысл связки теряется напрочь.
А как тогда пользователи будут видеть эти основные продукты? Идея была в том, что существует список основных продуктов, видеть которые могут все пользователи. При регистрации нового пользователя он (пользователь) может добавлять новые продукты, которые будет видеть лишь он, а не другие пользователи (здесь я немного пересмотрел алгоритм, описанный мною выше). Соответственно, в этой таблице-связке должны появляться новые записи с id этих продуктов. | |
|
|
|
|
|
|
|
для: baston
(22.04.2010 в 15:59)
| | 2. Зачем id в таблице-связке?
3. Зачем всем пользователям вносить все продукты?
Смысл связки теряется напрочь. | |
|
|
|
|
|
|
|
для: baston
(22.04.2010 в 15:59)
| | 1. Стоп.
Если хозяин у продукта только один - зачем связь многие-ко-многим?
Достаточно чужого ключа, как я и предложил первым ответом.
Вернее, как Вы предложили темой ранее. | |
|
|
|
|