У меня есть три таблицы, таблица проектов, может быть много проектов, таблица тем, где у каждого проекта будет много предметов, и таблица условий, где у каждого предмета будет условие, а у проекта может быть много условий.

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

Надеюсь, это имеет смысл. Кроме того, я думаю об использовании sqlite, но если невозможно сделать что-то подобное с системой базы данных, существует ли такая, которая может? Желательно бесплатно и на основе sql, то есть mysql или postgresql.

Спасибо.

Редактировать: несколько примеров;

В проекте A есть условия 1, 2 и 3. Все они взяты из таблицы условий, в которой есть условия 1,2,3,4,5. Теперь субъект X является частью проекта A, поэтому ему следует разрешить принимать только условия 1, 2, 3, а НЕ 4 или 5.

Это возможно?

0
user1170304 8 Янв 2014 в 18:35

2 ответа

Лучший ответ

Похоже, вам нужно что-то подобное:

enter image description here

Ключевым аспектом этого дизайна является использование идентифицирующих отношений и результирующих составных ключей. Это позволяет нам перенести PROJECT.PROJECT_ID:

  • не только непосредственно к SUBJECT
  • но также через CONDITION, а затем в SUBJECT.

Оба этих «пути» миграции в конечном итоге объединяются в одно поле (примечание FK1,FK2 перед SUBJECT.PROJECT_ID), что гарантирует, что когда субъект подключен к условию, они оба должны быть подключены к < em> тот же проект.

1
Branko Dimitrijevic 8 Янв 2014 в 19:23
create table Condition(
    Id int not null, --PK
    Description varchar(50)
)

create table ProjectCondition(
    Id int not null, --PK
    ProjectId int not null, -- FK to Project PK#
    ConditionId int not null -- FK to Condition PK
)

create table ProjectSubject(
    Id int not null, --PK
    ProjectId int not null, -- FK to Project PK
    SubjectId int not null -- FK to Subject PK
)

create table ProjectSubjectCondition(
    Id int not null, -- PK
    ProjectConditionId int not null -- FK to ProjectContion PK
)

Предположения:

  • Тема существует отдельно от проекта (т.е. где-то есть таблица тем)
  • Состояние такое же

(Не имеет большого значения, ошибаются ли они.)

При связывании ProjectSubjectCondition с ProjectConditions состояние темы для проекта должно быть условием проекта.

Ура -

0
simon at rcl 8 Янв 2014 в 16:25