2010-02-13 4 views
0

На моем сайте пользователь может оставлять комментарии и группировать их в категории.Нормализация базы данных mysql

например.

category: good quotes 
links: "some quote 1", "some quote 2", and so on. 

Таким образом, количество категорий и комментариев определяется пользователями.

Я думаю, как я должен организовать это в базе данных mysql.

У меня не может быть одной таблицы для каждой категории, потому что было бы много категорий.

Но как я мог организовать это в таблице?

Должна ли категория быть в одном столбце, а комментарий - строка? или это должно быть наоборот?

Но разве это не плохая практика, чтобы увеличить количество столбцов после того, как вы определили таблицу?

Любое предложение было бы полезно!

ответ

1

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

Затем, чтобы указать, что комментарий относится к какой-либо категории, вы добавляете строку в последнюю таблицу. Например, если комментарий с идентификатором 42 относится к категориям с идентификаторами 6 и 8, вы добавляете строки (42, 6) и (42, 8).

0

Вы можете использовать что-то вроде (Это Sql Server, но должно дать вам идею)

DECLARE @Categories TABLE(
     CategoryID INT, 
     CategoryDescription VARCHAR(50) 
) 

DECLARE @Comments TABLE(
     CommentID INT, 
     Comment VARCHAR(MAX), 
     CategoryID INT, 
     UserID INT 
) 

Можно даже, возможно, есть определенные категории для каждого пользователя, а затем изменить таблицу категорий для

DECLARE @Categories TABLE(
     CategoryID INT, 
     CategoryDescription VARCHAR(50), 
     UserID INT 
) 

Это позволит вам указать категории пользователей для их поиска в пользовательском интерфейсе.

Вы можете использовать этот дизайн еще больше, используя таблицу UserCategories, которая позволит пользователям multplie быть связанными с несколькими категориями.

Это будет почти как таблица правил.

DECLARE @UserCategories TABLE(
     UserID INT, 
     CategoryID INT 
) 

, а затем сохранить оригинальную Категории таблицу

DECLARE @Categories TABLE(
      CategoryID INT, 
      CategoryDescription VARCHAR(50) 
    ) 
0

Вам понадобится таблица комментариев и таблица категорий, поэтому каждый комментарий и каждая категория будут содержать строку в соответствующей таблице.

Предполагая, что комментарий может принадлежать более чем одной категории, вам также понадобится таблица «моста», в которой каждая строка будет содержать идентификатор комментария и идентификатор категории, к которой она принадлежит.

1

Я бы различные комментарии и категории, а затем «связывающую» таблицы для отображения отношений (и избежать дублирования):

псевдо-SQL:

comment { 
    id 
    comment 
}  
category { 
    id 
    category 
}  
comment_categories { 
    fk_comment_id 
    fk_category_id 
} 
+0

Из этой конструкции, казалось бы, данный комментарий может принадлежать многим категориям ... –

+0

К сожалению, в этом вопросе явно не указано, являются ли комментарии и кошки 121, 12m или m2m - я догадался m2m. – reech