|
|
|
| Не придумал названия темы, которое бы действительно поясняло ее суть.
Итак, допустим, такая ситуация.
Есть список зарегистрированных авторов. И если они добавляют свой рассказ, то в базе можно просто записать 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}
|
Однако, из-за того, что добавлять можно не только произведения существующих авторов, придется идти более длинным путем.
Какой вы посоветуете? | |
|
|
|
|
|
|
|
для: neadekvat
(17.01.2011 в 06:19)
| | >Итак, у меня два вопроса - каким образом в таком случаи сделать структуру и как осуществлять
>выборку?
А почему бы автора не регистрировать искусственно, даже если реального пользователя нет? Пусть у него будет аккаунт. Мне кажется так будет проще организовать базу данных, чем делить авторов на тех, кто пользуется сайтом и кто не пользуется. | |
|
|
|
|
|
|
|
для: cheops
(17.01.2011 в 08:15)
| | А я бы вообще не стал мешать мухов с котлетами
Есть владелец аккаунта, а есть автор произведения - это совершенно разные сущности
и то что по счастливой случайности владелец аккаунта является автором какого-либо произведения это его "проблемы" :)
_____
ту неадекват:
нужно учиться не "думать" против ветра :) | |
|
|
|
|
|
|
|
для: Valick
(17.01.2011 в 08:54)
| | По уму бы да, следовало следовало сделать: владелец аккаунта - это одна сущность, автор - другая. Причем владелец аккаунта, является еще и автором. Можно создать таблицу авторов (здесь и обычные авторы и авторы-пользователи), а все, что нужно для функционирования аккаунта (логин, пароль, e-mail) выделить в отдельную таблицу, связанную и подчиненную таблице авторов. Потребуется автору аккаунт - его можно будет завести. Т.е. поставить во главу угла не таблицу пользователей, а таблицу авторов. Но насколько я понял, это не подходит, поэтому самым лучшим вариантом - будут фиктивные пользователи-авторы. | |
|
|
|
|
|
|
|
для: cheops
(17.01.2011 в 09:00)
| | Дело в том, что сайт по большей части будет для выставления рассказов, и если человек регистрируется - то было бы круто, если бы он тоже выставил свой рассказ.
Решил сделать так - ввести в таблицу пользователей (они же авторы) еще одно значение (0/1), которое бы показывало, зарегистрирован ли это автор, или это "авторег".
Почему так? В голове была идея, оставлял ее "на потом" - а она как раз тут уместилась.
Идея в том, чтобы авторы, от имени которых уже выставлялись рассказы, могли зарегистрировать под своим ником и к их профилю сразу были бы привязаны эти самые рассказы. Правда, тут будет работать ручная проверка (кроме случая, когда указанный email автора в рассказах совпадает с e-mail регистрации автора).
Выслушаю критику и вытерплю камни :) | |
|
|
|
|
|
|
|
для: neadekvat
(17.01.2011 в 13:56)
| | Флаг идея хорошая - меньше работы по отсеиванию пользователей с собственными работами. Подтвердить авторство может быть достаточно сложно, но почему бы такой сервис не предоставить. Вообще есть хорошее правило, если сомневатесь в структуре базы данных или планируете её менять в будущем - упаковывайте все операции либо в хранимые процедуры, либо в обычные PHP-функции, которые группируются в одном месте, библиотеке или классе. Во всем коде обращайтесь только к этим функциям, потом если задумаете изменить структуру базы данных, придется переработать небольшой участок кода, причем сосредоточенный в одном месте. | |
|
|
|
|
|
|
|
для: cheops
(17.01.2011 в 16:20)
| | Спасибо за совет.
Скорее всего, так и поступлю. | |
|
|
|