Проектирование универсальных вложений SQL Table / Entity в EF Code-First - PullRequest
0 голосов
/ 01 декабря 2011

В моей системе многим сущностям требуется наличие вложений.

Например, сущность Миссии требует собственных вложений, а также Действия, Проекты и т. Д.

Вопрос в том, как оформить таблицу вложений?

  1. Таблица вложений для каждой сущности, например MissionsAttachments, ActivitiesAttachments и т. Д.
  2. Одна таблица для всех вложений в системе? если да, то какими будут идентификаторы для каждого вложения?

Есть идеи, как создать общую таблицу вложений, которая будет обслуживать всю систему?

Ответы [ 2 ]

0 голосов
/ 01 декабря 2011

Если вам нужна общая таблица вложений, вы можете сделать следующее:

create table attachments 
(attachment_id int not null, 
 parent_id int not null, 
 parent_type varchar(32) not null, 
  other_cols_here, 
 primary key(attachment_id))

Это позволит вам иметь независимые таблицы сущностей (поэтому вам не обязательно всегда иметь строку в какой-то общей таблице для задания, действия и т. Д.). Чтобы найти вложение, скажем, для миссии, вам нужно сделать: select * from attachments where parent_id = MISSION_ID and parent_type = 'mission'

Недостатком этого, конечно, является то, что вы отказываетесь от возможности иметь ограничение внешнего ключа для таблицы миссии для parent_id.

0 голосов
/ 01 декабря 2011

Я бы просто имел одну таблицу для вложений и одну таблицу для учета сущностей. Например:

Entities Table:
==============
EntityId
EntityName

Attachments Table:
=================
AttachmentId
EntityId
Attachment
...