Мой друг и я строим веб-сайт и имеем серьезные разногласия. Ядром сайта является база комментариев о «людях». В основном люди могут вводить комментарии, и они могут вводить человека, о котором идет комментарий. Затем зрители могут искать в базе данных слова, которые есть в комментарии или части имени человека. Это полностью пользовательский. Например, если кто-то хочет опубликовать комментарий к неверной версии имени человека, он может, и это нормально. Таким образом, может быть несколько написаний разных людей, перечисленных как несколько разных записей (некоторые с отчеством, некоторые с псевдонимом, некоторые неправильно написанные и т. Д.), Но это все в порядке. Нам все равно, если люди комментируют случайных людей или воображаемых людей.
В любом случае, проблема в том, как мы структурируем базу данных. Сейчас это всего лишь одна таблица с идентификатором комментария в качестве первичного ключа, а затем есть поле для «лица», о котором идет комментарий:
идентификатор комментария - комментарий - человек
1 - «он странный» - Джон Смит
2 - "Вонючая девушка" - Дженни
3 - «гей» - Джон Смит
4 - "должен мне 20 долларов" - Дженныыыыыыыыы
Все работает нормально. Используя базу данных, я могу создавать страницы, которые содержат все «комментарии» для конкретного «человека». Однако он одержим тем, что база данных не нормализована. Я прочитал о нормализации и узнал, что он был неправ. Таблица в настоящее время нормализована, потому что идентификатор комментария является уникальным и диктует «комментарий» и «лицо». Теперь он настаивает на том, чтобы у «человека» был свой СОБСТВЕННЫЙ стол, потому что это «вещь». Я не думаю, что это необходимо, потому что, хотя «человек» на самом деле является большим контейнером (один «человек» может иметь много «комментариев» о них), база данных, кажется, работает нормально, а «человек» является атрибутом идентификатор комментария. Я использую различные вызовы PHP для разных вариантов выбора SQL, чтобы волшебно выглядеть более изощренным на выходе и по-разному, как пользователь может искать и видеть результаты, но на самом деле настройка довольно проста. Теперь я позволяю пользователям оценивать комментарии большим и большим пальцами, и я сохраняю «счет» как другое поле в той же таблице.
Я чувствую, что в настоящее время нет необходимости иметь отдельную таблицу только для уникальных записей о людях, потому что у людей нет собственной оценки или каких-либо собственных атрибутов. Только комментарии делают. Мой друг настолько настойчив, что это необходимо для эффективности. Наконец, я сказал: «Хорошо, если вы хотите, чтобы я создал отдельную таблицу, и пусть« person »будет ее собственным полем, тогда каким будет второе поле? Потому что, если таблица имеет только один столбец, это кажется бессмысленным. Я согласен что позже мы можем создать необходимость предоставить «человеку» свой собственный стол, но тогда мы сможем с этим справиться ». Затем он сказал, что строки не могут быть первичными ключами, и что мы будем преобразовывать «лиц» в текущей таблице в числа, а числа будут первичным ключом в новой таблице «человек». Мне это кажется ненужным, и это усложнит чтение текущей таблицы. Он также считает, что создать вторую таблицу позже будет невозможно, и сейчас нам нужно предвидеть, что она может понадобиться нам позже.
Кто прав?