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

Форум MySQL

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Существующие и несуществующие записи
 
 автор: neadekvat   (17.01.2011 в 06:19)   письмо автору
 
 

Не придумал названия темы, которое бы действительно поясняло ее суть.

Итак, допустим, такая ситуация.
Есть список зарегистрированных авторов. И если они добавляют свой рассказ, то в базе можно просто записать id автора, ну, а поле в бд называлось бы author_id, к примеру.
Но есть возможность добавить автора, который не зарегистрирован на сайте. Соответственно, в базу надо вносить само имя автора.

Итак, у меня два вопроса - каким образом в таком случаи сделать структуру и как осуществлять выборку?

При этом условие задачи менять нельзя (т.е. советовать добавлять нового автора в базу и использовать этот id не надо).

Теперь пошире, ибо, возможно, не совсем понятно, о чем я вообще.
В случаи, если автором мог быть только зарегистрированный пользователь, то структура бд была бы примерно следующей:
essays
essay_id int ai primary
author_id int index

authors
author_id int ai primary
name varchar

А запрос при выборке сочинения и его автора был бы, соответственно, примерно таким:
SELECT t1.*, t2.name FROM essays t1
LEFT JOIN authors t2 USING(author_id)
WHERE essay_id = {id}


Однако, из-за того, что добавлять можно не только произведения существующих авторов, придется идти более длинным путем.
Какой вы посоветуете?

  Ответить  
 
 автор: cheops   (17.01.2011 в 08:15)   письмо автору
 
   для: neadekvat   (17.01.2011 в 06:19)
 

>Итак, у меня два вопроса - каким образом в таком случаи сделать структуру и как осуществлять
>выборку?
А почему бы автора не регистрировать искусственно, даже если реального пользователя нет? Пусть у него будет аккаунт. Мне кажется так будет проще организовать базу данных, чем делить авторов на тех, кто пользуется сайтом и кто не пользуется.

  Ответить  
 
 автор: Valick   (17.01.2011 в 08:54)   письмо автору
 
   для: cheops   (17.01.2011 в 08:15)
 

А я бы вообще не стал мешать мухов с котлетами
Есть владелец аккаунта, а есть автор произведения - это совершенно разные сущности
и то что по счастливой случайности владелец аккаунта является автором какого-либо произведения это его "проблемы" :)
_____
ту неадекват:
нужно учиться не "думать" против ветра :)

  Ответить  
 
 автор: cheops   (17.01.2011 в 09:00)   письмо автору
 
   для: Valick   (17.01.2011 в 08:54)
 

По уму бы да, следовало следовало сделать: владелец аккаунта - это одна сущность, автор - другая. Причем владелец аккаунта, является еще и автором. Можно создать таблицу авторов (здесь и обычные авторы и авторы-пользователи), а все, что нужно для функционирования аккаунта (логин, пароль, e-mail) выделить в отдельную таблицу, связанную и подчиненную таблице авторов. Потребуется автору аккаунт - его можно будет завести. Т.е. поставить во главу угла не таблицу пользователей, а таблицу авторов. Но насколько я понял, это не подходит, поэтому самым лучшим вариантом - будут фиктивные пользователи-авторы.

  Ответить  
 
 автор: neadekvat   (17.01.2011 в 13:56)   письмо автору
 
   для: cheops   (17.01.2011 в 09:00)
 

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

Решил сделать так - ввести в таблицу пользователей (они же авторы) еще одно значение (0/1), которое бы показывало, зарегистрирован ли это автор, или это "авторег".
Почему так? В голове была идея, оставлял ее "на потом" - а она как раз тут уместилась.
Идея в том, чтобы авторы, от имени которых уже выставлялись рассказы, могли зарегистрировать под своим ником и к их профилю сразу были бы привязаны эти самые рассказы. Правда, тут будет работать ручная проверка (кроме случая, когда указанный email автора в рассказах совпадает с e-mail регистрации автора).

Выслушаю критику и вытерплю камни :)

  Ответить  
 
 автор: cheops   (17.01.2011 в 16:20)   письмо автору
 
   для: neadekvat   (17.01.2011 в 13:56)
 

Флаг идея хорошая - меньше работы по отсеиванию пользователей с собственными работами. Подтвердить авторство может быть достаточно сложно, но почему бы такой сервис не предоставить. Вообще есть хорошее правило, если сомневатесь в структуре базы данных или планируете её менять в будущем - упаковывайте все операции либо в хранимые процедуры, либо в обычные PHP-функции, которые группируются в одном месте, библиотеке или классе. Во всем коде обращайтесь только к этим функциям, потом если задумаете изменить структуру базы данных, придется переработать небольшой участок кода, причем сосредоточенный в одном месте.

  Ответить  
 
 автор: neadekvat   (17.01.2011 в 18:39)   письмо автору
 
   для: cheops   (17.01.2011 в 16:20)
 

Спасибо за совет.
Скорее всего, так и поступлю.

  Ответить  
Rambler's Top100
вверх

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