Вопрос о нормализации - PullRequest
       28

Вопрос о нормализации

1 голос
/ 18 января 2011

Мне просто интересно, какой из них лучше использовать в веб-приложении.У меня есть веб-приложение, которое позволяет пользователю публиковать на сайте.Есть три разных типа постов, но достаточно похожих, чтобы я мог поместить их в одну таблицу.Это нормально?

Я мог бы нормализовать таблицы таким образом?(Помещая тип под любым)

Таблица 1

UserPost
post_id 
user_id
type

Таблица 2

Post
post_id 
datetime
text

ИЛИ будет использоватьтаблица лучше?

Таблица

Post
user_id
post_id 
datetime
type
text

Я склоняюсь в сторону третьего пути, если кто-то не может указать на недостатки.

Ответы [ 3 ]

1 голос
/ 18 января 2011

Объедините таблицы, нет ничего особенного в том, чтобы разбивать их, как в таблицах 1 и 2.Теперь, если в таблице 1 есть отдельный ключ, отличный от post_id, вы можете устранить некоторую избыточность.Пример:

Table 1

UserPost
user_post_id 
user_id
type

Table 2

Post
post_id 
user_post_id 
datetime
text
1 голос
/ 18 января 2011

При первом подходе вам всегда нужно будет создать строку в обеих таблицах для каждого сообщения пользователя. Таким образом, нет недостатка в наличии только одной таблицы, тогда user_id должен быть внешним ключом для вашей пользовательской таблицы, post_id первичный ключ и другие столбцы содержат данные. Нет оснований для создания двух таблиц.

Если три разных типа сообщений описываются одним общим полем, то можно использовать дискриминатор, например type.

0 голосов
/ 18 января 2011

Исходя из вашего последнего комментария, я понимаю, что post_id будет ключом-кандидатом во ВСЕХ ТРЕХ из ваших примеров таблиц. Если это правильно, то я предлагаю вам создать одну таблицу для каждого уникального набора атрибутов (каждого типа сообщения). Таким образом, если все сообщения имеют одинаковые общие атрибуты, то имеет смысл иметь их все в одной таблице, но если есть два или три типа, то более подходящими будут две или три таблицы.

...