создание реляционных таблиц в MySQL - PullRequest
1 голос
/ 28 июля 2011

Попытка объяснить это как можно лучше:

Для начала у меня есть таблица с именем vocabulary:

+-----+---------------------+
| id  |  name               |
+-----+---------------------+
|  1  |  Farming            |
|  2  |  Agriculture        |
|  3  |  Design             |
|  4  |  Graphic Design     |
|  5  |  Interactive Design |
|  6  |  Animal Husbandry   |
| ... |          ...        |
| 887 |  Carpentry          |
+-----+---------------------+

В листе Excel у меня есть списки 'связанные элементы словаря ', которые могут выглядеть следующим образом:

Interactive Design                       Farming
--------------------                     --------------------
Graphic Design                           Agriculture
Design                                   Animal Husbandry

Я хочу создать таблицу с именем vocabulary_relations и создать отношения между заголовком (в приведенном выше примере таблицы Excel) для каждого элемента под ним,Например, интерактивный дизайн будет указывать на графический дизайн и дизайн.Сельское хозяйство будет указывать на сельское хозяйство и животноводство.

Например, таблица будет выглядеть так (используя таблицу vocabulary для справки):

+----------------+--------------+
| vocabulary_id  |  related_id  |
+----------------+--------------+
|       5        |       4      |
|       5        |       2      |
|       1        |       2      |
|       1        |       6      |
+----------------+--------------+

Таким образом, я могу тянутьвсе related_id для любого vocabulary_id.

Например, если бы я запросил vocabulary_id = 1 (сельское хозяйство), он вернул бы related_id => 2, 6 (сельское хозяйство, животноводство, соответственно).

У кого-нибудь есть идеи, как автоматизировать что-то подобное?Я НЕ ищу пользовательский интерфейс, это статические данные.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 28 июля 2011
INSERT INTO vocabulary_relations
    (vocabulary_id, related_id)
    SELECT v1.id, v2.id
        FROM RelatedItems ri
            INNER JOIN vocabulary v1
                ON ri.col1 = v1.name
            INNER JOIN vocabulary v2
                ON ri.col2 = v2.name
0 голосов
/ 28 июля 2011

Вы рассматривали что-то подобное?(Предполагается, по крайней мере, уникальное ограничение на словарь vocabulary.name.)

create table vocabulary_relations (
  vocabulary_category varchar(35) not null,  -- references vocabulary (name), 
  related_vocabulary varchar(35) not null,   -- references vocabulary (name), 
  primary key (vocabulary_category, related_vocabulary)
);

insert into vocabulary_relations values
('Interactive Design','Graphic Design'),
('Interactive Design','Design'),
('Farming','Agriculture'),
('Farming','Animal Husbandry');

Сделав это, выбрать очень просто.

select * 
from vocabulary_relations
order by vocabulary_category, related_vocabulary;

vocabulary_category    related_vocabulary
--
Farming                Agriculture
Farming                Animal Husbandry
Interactive Design     Design
Interactive Design     Graphic Design

Нет соединений.Легко понять и устранить неисправности.Очень просто импортировать из CSV.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...