Моделирование базы данных с помощью UML: отношения

Я изучаю UML для моделирования базы данных для проекта класса. По сути, база данных предназначена для социальной сети. Таблицы: пользователь, друзья, профиль, статус, wall_posts и комментарии. У меня возникли проблемы с определением точных отношений.

На первый взгляд кажется, что все таблицы имеют отношение композиции (различной кратности); у пользователя «есть» профиль (1-1), у пользователя «есть» друзья (1-0..*), сообщения на стене (1-0..*) и у сообщения на стене «есть» комментарии (1-0. .*). Если пользователь удаляется, эффект каскадируется и должен удалить все записи с этим идентификатором пользователя. В пользовательской таблице есть такая информация, как имя uid (которое не реплицируется в таблице wall_posts), поэтому что-то вроде записи сообщения необходимо удалить.

Есть ли изъян в моей логике?


person mr_bond    schedule 11.03.2012    source источник


Ответы (1)


Часть, где a user "has" friends(1-0..*) имеет недостатки.

Это должно быть n-m между таблицей пользователей и самой собой (или 0..*-0..* в нотации UML), потому что все эти друзья не являются исключительными для одного пользователя. У каждого (надеюсь) может быть много друзей. Может быть реализована таблицей friendship, которая содержит два (разных) внешних ключа к пользовательской таблице и, возможно, дополнительные атрибуты, описывающие взаимосвязь.

person Erwin Brandstetter    schedule 11.03.2012
comment
То, как это реализовано, таблица друзей - это, по сути, таблица дружбы (я должен изменить имя). Он содержит два внешних ключа (f_uid, with_uid) и атрибут с момента_даты. Каков тип отношения к пользователю в этом случае? Это все еще композиция? Дружба существует только между двумя людьми, но у пользователя их может быть много.(2-n?) - person mr_bond; 11.03.2012
comment
@Ch0b0: отношение между user и friendship будет 1-0..*, и таких соединений будет два. - person Erwin Brandstetter; 11.03.2012