Вопрос дизайна базы данных - PullRequest
2 голосов
/ 20 марта 2011

У меня есть много-много отношений, связанных с сущностями: Отделы и Области.

1) Отделы.(Импорт, экспорт)
2) Области применения.(Nationwide, International)

1 отдел может быть связан со многими различными областями.И одна область видимости связана со многими отделами.

До сих пор таблица отношений многих со многими была бы такой:

DepartmentId (внешний ключ)
ScopeId.(Внешний ключ)

Каждое отношение отдела / области будет иметь целую конфигурацию, включающую типы документов, коды партий и т. Д.

(То есть для:

отдел 1 / область 1/ тип документа 1
отдел 1 / область действия 1 / тип документа 2

И затем для каждого типа документа будет несколько различных кодов:

отдел 1 / область действия 1 / документтип 1 / код 1
отдел 1 / область 1 / тип документа 1 / код 2

отдел 1 / область 1 / тип документа 2 / код 1
отдел 1 / область 1 / тип документа 2/ Код 2

Итак, я имею в виду таблицу отношений «многие ко многим» (отдел / область):

Id (автоинкремент) (первичный ключ)
DepartmentId
ScopeId.

Этот «Id» будет внешним ключом в другой таблице.

Это нормально, что я делаю, или я нарушаю какое-то правило передовой практики?

Спасибо

ОБНОВЛЕНИЕ 1
Я обнаружил, что у меня будет несколько разных маny ко многим таблицам взаимосвязей.

1) Определяет, какие области относятся к каждому отделу

Id
DepartmentId
ScopeId

2) Тип документа, связанный с каждымобласть действия в каждом отделе.

Id (первичный ключ, автоинкрементный)
DepartmentScopeId (внешний ключ, 1)
DocumentTypeId (внешний ключ к типу документа).

3) кодыотносится к каждому типу документа, который находится в области, принадлежащей отделу.

Id (первичный ключ, автоинкрементный).
CodeName (nvarchar (50))
DocumentTypeDepartmentScopeId (внешний ключ для 2)).

Я не уверен, что я слишком усложняю вещи или это нормальный шаблон в мире баз данных.

Полагаю, что после этого я мог бы создать представление, котороепомог бы мне получить доступ к данным, например: «Вернуть все коды, по типу документа, по объему, по отделу».

Было бы замечательно, если бы я мог получить совет, если это будет правильный путьэтот.

Спасибо

1 Ответ

3 голосов
/ 20 марта 2011

Я тоже считаю, что это лучшая практика.Вы также можете добавить дополнительную информацию в эту новую таблицу, касающуюся отношений (например, dateCreated, если это имеет смысл).Кроме того, если это важно, не забудьте установить пару (DeparmentId, ScopeId) как Уникальную, чтобы избежать повторяющихся назначений.

...