2012-06-08 2 views
1

Скажем, у меня 3 таблицы.Базовый дизайн таблицы MySql и SQL-запрос

 
Projects 
---------- 
projectId PK 
 
SubProject 
---------- 
projectId PK 
subProjectId PK 

В основном все проекты перечислены в таблице проектов. Проект может иметь подпроекты. Так, например, если у меня есть следующие строки в моей таблице:

 
Projects 
---------- 
1 
2 
3 
 
SubProjects 
---------- 
1,2 
1,3 

Есть три проекта 1,2 и 3. Проекты 2 и 3 подпроектов проекта 1.

У меня есть два вопроса. Во-первых, должны ли внешние ключи быть projectId в проектах, ссылающихся на projectId и subProjectId в SubProjects, или если внешние объекты будут projectId в подпроектах, ссылающихся на projectId в проектах и ​​subProjectId в подпроектах, ссылающихся на projectId в проектах.

Следует отметить, что проект может быть подпроектом для нескольких проектов.

Во-вторых, как получить субпроекты проекта с запросом. Я использую:

 

Select * from projects p1 Join subProjects sp Join projects p2 
where p1.projectId = sp.subProjectId and sp.subProjectId = p2.projectId; 
 

я получаю следующий результат:

 
1 , 2 
1 , 3 

Я хочу, чтобы это просто вернуть

 
2 
3 

ответ

0

Существует приложение под названием SQLmaestro вы создаете эти коды автоматически, У меня с ним много времени; генерирует код mysql (таблицы, конкатенации, суставы, пользовательские запросы и т. д.).

Вот ссылка: http://www.sqlmaestro.com/products/mysql/maestro/

1

Я считаю, что вы можете ищете самостоятельный referenetial отношения, как описаны в
http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html
в этом случае вы бы только одна таблицы проектов, который имеет foreign_key в нем называется parent_project_id, и когда проект является подпроектом, этот подпроект использует этот parent_project_id для указания его родителя. Родитель не имеет ссылки на дочерний элемент в нем с точки зрения внешних ключей.

+0

Спасибо за ответ. У меня есть вопрос. Что касается случая, когда проект является субпроектом более чем из 1 проекта. Например, если есть три проекта 1,2,3. Скажем, 3 является подпроектом 2 и 1. Как это можно моделировать? – user489041

+0

Создав систему, основанную на древовидной структуре, я также предложил бы реализовать [Измененный обход дерева предзаказов] (http://www.sitepoint.com/hierarchical-data-database-2/). Вкус хороший и прекрасно работает. – bluevector

0

Для второй части вы захотите заменить * на название столбца, которое подпадает под 2,3. Я не вижу имен столбцов, поэтому я не уверен, что это sp, p1 или p2.

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