Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Как организовать запрет на удаление записей из таблицы?

Сообщения:  [1-10]   [11-19] 

 
 автор: baston   (22.04.2010 в 17:41)   письмо автору
 
   для: Trianon   (22.04.2010 в 17:36)
 

Огромное спасибо за помощь! Потихоньку утрясается и выстраивается структура. Пока рисую на бумаге.

  Ответить  
 
 автор: Trianon   (22.04.2010 в 17:36)   письмо автору
 
   для: baston   (22.04.2010 в 16:50)
 

пустую строку оно содержать не может - тип не даст.
не содержать ничего (быть NULL) - может. Но чтоб отыскать такие записи, придется делать полный перебор данных в таблице - индекс не спасет.
А 0 (или другой наперед фиксированный ключ) - решение.

  Ответить  
 
 автор: baston   (22.04.2010 в 17:00)   письмо автору
 
   для: Trianon   (22.04.2010 в 16:43)
 

Ага, начинаю доходить. Таким образом мое видение в последнем моем же ответе соотносится с вашими словами. Для общих продуктов ставим идентификатор, для остальных - id_user.
Спасибо.

  Ответить  
 
 автор: baston   (22.04.2010 в 16:50)   письмо автору
 
   для: baston   (22.04.2010 в 16:12)
 

Меня смущает в этой ситуации лишь один момент - наличие общих продуктов.
Действительно, можно организовать таблицу products таким образом, чтобы в ней были три основных столбца: id, name (имя продукта) и id_user (ID пользователя).
Тогда при добавлении нового продукта в поле id_user будет добавлен айди добавившего продукт пользователя. В этом случае и связка не нужна, а достаточно запроса, предложенного Трианоном.

Но я не могу понять, а что заносить в это поле для общих продуктов? Получается, что это поле не будет иметь обязательных значений и может содержать пустую строку, NULL или 0.
Спасибо.

  Ответить  
 
 автор: Trianon   (22.04.2010 в 16:43)   письмо автору
 
   для: baston   (22.04.2010 в 16:17)
 

Никаких пометок публичная/закрытая не требуется.
(если надо - поставьте пометку "видна/не видна хозяину", но это уже другая тема)

У записей в поле userid будет идентификатор-признак общего продукта.
Например, 0 . Или идентификатор администратора.
Формально это, конечно, несколько нарушает нормальную форму.
Но если Вы не собираетесь заводить группы пользователей-администраторов, либо делать продукты общими для определенных групп пользователей - такое решение представляется мне аккуратным компромиссом.

  Ответить  
 
 автор: baston   (22.04.2010 в 16:26)   письмо автору
 
   для: Trianon   (22.04.2010 в 16:04)
 

Вы предложили:
>PPS. Если еще чуть-чуть подумать, то окажется нелишним таки назначить общим данным конкретный userid.
>Чтобы вытаскивать строки по индексу: А не полным сканированием.
>
"SELECT ... WHERE userid = $public_id OR userid = $user_id"


Таким образом, правильно ли я понимаю, что нужно добавить в таблицу products поле с отметкой (публичная запись или закрытая)? А в таблицу-связки добавлять только новые значения для собственноручно добавленных продуктов?

Тогда при отображении таблицы для конкретного пользователя можно делать запросы из двух таблиц: products и таблицы-связки.

  Ответить  
 
 автор: baston   (22.04.2010 в 16:17)   письмо автору
 
   для: Trianon   (22.04.2010 в 16:04)
 

>Если хозяин у продукта только один - зачем связь многие-ко-многим?
>Достаточно чужого ключа, как я и предложил первым ответом.

Это было бы хорошо для того продукта, который добавляется конкретным пользователем - хозяином. Но ведь есть еще список общих продуктов, которые должны быть видны всем пользователям.

  Ответить  
 
 автор: baston   (22.04.2010 в 16:12)   письмо автору
 
   для: Trianon   (22.04.2010 в 16:05)
 

>2. Зачем id в таблице-связке?

Согласен, лишнее.

>3. Зачем всем пользователям вносить все продукты?
>Смысл связки теряется напрочь.

А как тогда пользователи будут видеть эти основные продукты? Идея была в том, что существует список основных продуктов, видеть которые могут все пользователи. При регистрации нового пользователя он (пользователь) может добавлять новые продукты, которые будет видеть лишь он, а не другие пользователи (здесь я немного пересмотрел алгоритм, описанный мною выше). Соответственно, в этой таблице-связке должны появляться новые записи с id этих продуктов.

  Ответить  
 
 автор: Trianon   (22.04.2010 в 16:05)   письмо автору
 
   для: baston   (22.04.2010 в 15:59)
 

2. Зачем id в таблице-связке?

3. Зачем всем пользователям вносить все продукты?
Смысл связки теряется напрочь.

  Ответить  
 
 автор: Trianon   (22.04.2010 в 16:04)   письмо автору
 
   для: baston   (22.04.2010 в 15:59)
 

1. Стоп.
Если хозяин у продукта только один - зачем связь многие-ко-многим?
Достаточно чужого ключа, как я и предложил первым ответом.
Вернее, как Вы предложили темой ранее.

  Ответить  

Сообщения:  [1-10]   [11-19] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования