0

У меня есть следующий проект базы данных:Должен ли я нормализовать этот проект базы данных дальше?

TABLE [Document] 
[DocumentId] [int] NOT NULL, --Primary Key 
[Status] [bit] NULL, 
[Text] [nvarchar](max) NULL, 
[FolderPath] [nvarchar](max) NULL 

TABLE [Metadata] 
[MetadataId] [int] IDENTITY(1,1) NOT NULL, -- Primary Key 
[DocumentId] [int] NOT NULL,    -- Foreign Key Document.DocumentId (1:1 relationship) 
[Title] [nvarchar](250) NOT NULL, 
[Author] [nvarchar](250) NOT NULL 

TABLE [Page](
[PageId] [int] IDENTITY(1,1) NOT NULL,  -- Primary Key 
[DocumentId] [int] NOT NULL,    -- Foreign Key Document.DocumentId (1:N Relationship) 
[Number] [int] NOT NULL, 
[ImagePath] [nvarchar](max) NULL, 
[PageText] [nvarchar](max) NOT NULL 

TABLE [Word](
[WordId] [int] IDENTITY(1,1) NOT NULL,  -- Primary Key 
[PageId] [int] NOT NULL,     -- Foreign Key Page.PageId (1:N Relationship) 
[Text] [nvarchar](50) NOT NULL 

TABLE [Keyword](
[KeywordId] [int] IDENTITY(1,1) NOT NULL, -- Primary Key 
[Word] [nvarchar](50) NOT NULL 

TABLE [DocumentKeyword](
[Document_DocumentId] [int] NOT NULL,  -- Foreign Key Document.DocumentId (N:N Relationship) 
[Keyword_KeywordId] [int] NOT NULL  -- Foreign Key Keyword.KeywordId 

Я использую Entity Framework Code First, чтобы создать базу данных.

Должен ли я нормализовать дизайн своей базы данных дальше? т. е. создавать таблицы ссылок между документами и страницей, документами и метаданными и т. д.? Если да, есть ли способ заставить Entity Framework создавать таблицы отношений для меня, так что мне не нужно включать их в мои модели? Я пытаюсь научиться делать это правильно и наиболее эффективно.

спасибо.

ответ

1

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

  1. Документ (в реальной жизни, по крайней мере) может быть написана более чем одним автором , Это означает, что ваше отношение 1: 1 от документа к Метаданные должны быть соотношением 1: n (если вы не можете доказать, что никогда не будет ситуации, когда существует более одного автора)
  2. Название документа (на мой взгляд) больше свойство документа, чем часть метаданных (также имея в виду)
  3. Что делает эта таблица в Word?
  4. Столбец Keyword_KeywordId следует называть явно KeywordId, если вы хотите быть последовательным в своем наименовании. То же самое относится к Document_DocumentId.

Для остальных это выглядит довольно нормализуется

+0

1. Должен ли я создать таблицу Автор? У меня также есть другие поля, такие как Collector, Owner и т. Д., Не показанные выше. Нужно ли мне создавать таблицы для каждого, или я могу использовать таблицу «Лицо»? 3. Эта база данных предназначена для OCR'ing изображений документов. Таблица слов содержит изображения и положение слов в документе. В интересах краткости я пропустил столбцы. 4. Имена столбцов были созданы автоматически с помощью сущности. Есть ли способ указать конкретное имя? – Tums

+0

Я не могу принимать решения за вас, так как я не знаю спецификации. Если вы разрешаете более одного автора на документ, я думаю, лучше всего создать таблицу автора. Если вы не храните гораздо больше информации, чем просто имя и фамилию, и то же самое верно для всех других лиц в вашей базе данных, вы можете решить объединить таблицы. Но я бы лично начал с моделирования каждого вида человека как отдельного объекта. Сливать их легко, но расщепления нет. Я не возражаю против того, какое соглашение об именах вы используете, но я могу только рекомендовать, чтобы он был последовательным. – Ronald

+0

Спасибо. Я удалил «людей» и поместил их в новые таблицы. Мне пришлось сделать еще пару изменений, но ваши отзывы помогли. – Tums

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