Нормализация базы данных MySQL - PullRequest
0 голосов
/ 13 февраля 2010

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

, например

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

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

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

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

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

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

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

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

Ответы [ 4 ]

1 голос
/ 13 февраля 2010

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

псевдо-SQL:

comment { 
    id 
    comment 
}    
category { 
    id 
    category 
}    
comment_categories { 
    fk_comment_id  
    fk_category_id 
}
1 голос
/ 13 февраля 2010

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

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

0 голосов
/ 13 февраля 2010

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

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

0 голосов
/ 13 февраля 2010

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

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, которая позволит многопользовательским пользователям связываться с несколькими категориями.

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

DECLARE @UserCategories TABLE(
        UserID INT,
        CategoryID INT
)

и сохраните исходную таблицу категорий как

DECLARE @Categories TABLE(
            CategoryID INT,
            CategoryDescription VARCHAR(50)
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...