Что-то не так с таблицей с одним столбцом? (MSSQL сервер) - PullRequest
0 голосов
/ 22 апреля 2009

Рассмотрим следующий сценарий:

Таблицы:

  • Сотрудник (EmpId (PK), Имя)
  • TeamMembers (TeamId (PK), EmpId (PK))
  • Проект (ProjId (PK), TeamId)

Я действительно хочу избегать использования составного PK, но единственный выход, который я вижу из этой проблемы, - это создание таблицы Team с одним столбцом TeamId (PK) только в 1 столбце (я не хочу хранить информацию, связанную с командой, кроме его члены) ( EDIT : если я создам командную таблицу, я добавлю TeamMeberId в таблицу TeamMembers и сделаю ее PK)

Другая проблема с текущей настройкой заключается в том, что я не могу установить связь для TeamId между таблицами Project и TeamMebers

Должен ли я просто создать командную таблицу из 1 столбца? Каков наилучший подход в этом случае?

EDIT

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

EDIT2

Новый дизайн столов (что с ним не так?):

  • Сотрудник (EmpId (PK), Имя)
  • Команда (TeamID (ПК))
  • TeamMembers (TeamMemberId (PK), TeamId (FK), EmpId (FK))
  • Проект (ProjId (PK), TeamId (FK))

Ответы [ 6 ]

5 голосов
/ 22 апреля 2009

Если в команде интересен только тот факт, что она существует, то в таблице Team с одним столбцом нет ничего плохого: TeamId. Он обеспечивает ссылочную целостность из таблиц TeamMembers и Project.

Но я не понимаю вашего возражения против составного ПК. Столбцы TeamId и EmpId в таблице TeamMembers являются составным первичным ключом.

2 голосов
/ 22 апреля 2009

В этом сценарии нет ничего плохого. Я бы сделал это.

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

1 голос
/ 22 апреля 2009

В таблице с 1 столбцом все в порядке. Однако вы можете рассмотреть, какие другие атрибуты может иметь ваша таблица Team. Например, название команды?

Для связи между проектом и сотрудниками вам просто нужно присоединиться через таблицу TeamMembers.

0 голосов
/ 22 апреля 2009

Так я бы структурировал таблицы

  1. Сотрудник (EmployeeId (PK), Имя)
  2. Команда (TeamID (PK))
  3. TeamMembers (TeamMembersID (PK), TeamId, EmployeeId)
  4. Проект (ProjectID (PK), TeamId)

Мне нравится, когда PK является именем таблицы с суффиксом ID.
Это соглашение имеет побочный эффект от иногда создания на первый взгляд избыточных первичных ключей (как TeamMembersID), но оно решает проблему составного ключа.

0 голосов
/ 22 апреля 2009

Поскольку создается впечатление, что между Project и TeamMembers существует отношение 1: 1 (поправьте меня, если я ошибаюсь), и вы не хотите хранить дополнительную информацию о команде, не будет ли избавьтесь от таблицы TeamMembers и воспользуйтесь таблицей связей «многие ко многим» между Project и Employee

Employee (EmpId(PK), Name)
EmployeeProjects(EmpId(PK), ProjId(PK))
Project(ProjId(PK), <other project info>)

но ответить на ваш оригинальный вопрос. Нет ничего особенно плохого в том, чтобы иметь таблицу из одного столбца.

0 голосов
/ 22 апреля 2009

действительно ли EmpId должен быть первичным ключом в вашей таблице TeamMembers? Можно сказать, что в каждой команде много сотрудников, и отношения налаживаются.

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