2009-03-28 3 views
1

Мой сайт (ASP.NET/C#/MS-SQL 2005) имеет несколько разделов, которые позволяют добавлять комментарии (профили пользователей, страницы изображений, видео и т. Д.). Я хочу хранить все в одной таблице комментариев.Таблица комментариев с несколькими типами родителей

Моя проблема связывает комментарий с его родителем. Первичные ключи пользовательских профилей являются уникальными идентификаторами, в то время как изображения и видео используют ints. Я хотел бы иметь отношение внешнего ключа от комментария к его родитель.

Что было бы лучше всего подходит для этого?

ответ

1

Я бы использовал таблицы объединений, по одному для каждого раздела, который позволяет делать комментарии. Затем вы будете использовать любой ключ, который вы хотите для таблицы комментариев, и ваша таблица соединений просто должна иметь идентификатор из вашей таблицы разделов и из вашей таблицы комментариев.

user_profiles 
    id uniqueidentifier 
    ... 

    comments 
    id int 
    ... 

    user_profile_comments 
    profile_id uniqueidentifier 
    comment_id int 
1

Существует дебаты по поводу лучшей практики здесь. Мое мнение - использовать суррогатные идентификаторы для всего. Даже используйте его для профиля пользователя, нужен он вам или нет. Затем вам нужно иметь дело только с одним «шаблоном» для подключения связанных объектов. Это позволяет вам автоматизировать множество шаблонов, если хотите. Даже если вы не автоматизировать шаблон, он будет проще писать и менее подвержен ошибкам.