Редактировать -
Я не думал об этом первые 3 раза ...
Я голосую за -
(Решение № 3)
Пользователи
user id (pk)
Компьютеры
computer id (pk)
primary user id (fk -> computer users id)
Пользователи компьютеров
user id (pk) (fk -> user id)
computer id (pk) (fk -> user id)
Это лучшее решение, которое я могу придумать.
Почему мне нравится этот дизайн.
1) Поскольку это отношения с участием компьютеров и пользователей, мне нравится идея связать пользователя с несколькими компьютерами в качестве основного пользователя. Это может никогда не произойти, когда эта база данных используется.
2) Причина, по которой мне не нравится наличие primary_user в таблице ссылок
(computer_users.primary_user_id fk-> users.user_id)
- чтобы компьютер никогда не имел нескольких основных пользователей.
Учитывая эти причины, решение номер 3 выглядит лучше, поскольку вы никогда не столкнетесь с некоторыми возможными проблемами, которые я вижу с другими подходами.
Решение 1 проблемы - возможно иметь несколько основных пользователей на компьютер.
Проблема решения 2. Компьютер связывается с основным пользователем, когда компьютер и пользователь не связаны друг с другом.
computer.primaryUser = user.user_id
computer_users.user_id != user.user_id
Решение 3 проблемы - это кажется странным, не так ли? Кроме этого я не могу думать ни о чем.
Решение 4 проблемы - я не могу придумать другой способ сделать это.
Это четвертое редактирование, поэтому я надеюсь, что оно все еще имеет смысл.