0

У меня есть 2 стола с круговой зависимостью; каждая группа имеет ведущий членТаблицы, которые ссылаются друг на друга

+---------+-------+----------+ 
| GroupId | Group | MemberId | 
+---------+-------+----------+ 
|  1 | g1 |  1 | 
+---------+-------+----------+ 

и каждый член принадлежит к группе:

+----------+--------+---------+ 
| MemberId | Member | GroupId | 
+----------+--------+---------+ 
|  1 | m1  |  1 | 
+----------+--------+---------+ 

Одним из возможных решений является:

+----------+--------+---------+---------+ 
| MemberId | Member | GroupId | Leading | 
+----------+--------+---------+---------+ 
|  1 | m1  |  1 |  1 | 
+----------+--------+---------+---------+ 

, но приводит к Денормализация с члена к лидеру соотношение высокое.

Каков наилучший способ для этого?

ответ

1

Эти две таблицы спроектированы правильно. У вас есть вся информация:

1. groupID,GroupName,LeaderMemberID; 
2. MemberID,MemberName,MemberGroupID; 

может возникнуть проблема, если у вас есть несколько лидеров по той же одной группе, и/или каждый член может принадлежать к нескольким группам.

Но вы можете легко изменить дизайн к следующему часто используется подход:

1. groupID,GroupName; 
2. MemberID,MemberName; 
3. MemberID,GroupID,isLeader; 

Я надеюсь, что это помогает.

0

Предполагая, что у каждой группы может быть только один лидер, я бы сказал, что ваш первый пример в порядке. Хотя я бы назвал поле лидера «LeadMemberId» или некоторые такие, а не просто «MemberId», так как кто-то, кто смотрит в таблицу, может быть серьезно смущен тем, что означает наличие единственного члена в записи группы.

Если группа может иметь несколько лидеров, я бы добавил флаг «IsLeader» в запись участника. Тот факт, что большинство записей будет иметь false или 0, не имеет значения. Если может быть только один, я бы избегал этого, так как структура данных подразумевает, что может быть больше одного, и кто-то может сделать ошибку и установить флаг в более чем одной записи, и это может вызвать у вас горе ,

Смежные вопросы