2015-11-16 11 views
2

мой вопрос, кажется, довольно простой, но, к сожалению, я не мог найти удовлетворительного ответа на это.SQL множественность много для многих процесс вставки

Пожалуйста, обратите внимание на следующем примере:

enter image description here

Таблица Author определить автора, Document имеет по крайней мере одного автора и таблицы Authors группу всех авторов, что документ имеет.

Мой вопрос: каждый раз, когда я вставляю документ, мне нужно проверить, существует ли моя группа авторов уже на страницах Авторы.

Каков наилучший способ для этого? Я полагаю, что в первую очередь мне нужно будет проверить, существует ли эта группа, и тогда я должен получить этот идентификатор (если он уже существует) или создать новую запись на Authors (если группа не существует).

Вопрос:

Является ли это правильный процесс логики, которые должны происходить на столах, который имеет множество многие ко многим?

Как я могу проверить, существует ли группа значений уже на таблице Авторы?

Есть что-то вроде этого select * from Authors where a_id IN(1,2,3), но эксклюзивным способом. : S

Любая помощь будет отличной.

Благодаря

ответ

0

Если его "многие-ко-многим", я считаю, что структура таблицы вы ищете:

Автор ( a_id, имя, birth_date, домен )

Document ( d_id, аннотация, год)

Auth_Doc ( a_id, d_id )

С точки зрения проверки, если есть уже группа авторов, это зависит от п, как вы показываете ваши данные.Если бы я был загрузки документа, и я хотел бы проверить, если набор авторов существуют, я хотел бы сделать следующее:

Произнесите данные хранятся в виде:

A_ID | имя

1 | джон, домкрат, боб

SELECT * FROM Author WHERE name like '%john%' 

Я надеюсь, что это помогает,

Sohail

1

Я предпочел бы пойти с решением трех таблиц:

Author 
Document 
rel_author_document 

И rel_author_document будет иметь структуру например:

author_fk 
document_fk 

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

В rel_author_document вы можете добавить дополнительные столбцы, например role, если вам нужно что-то в этом роде.

При таком подходе у вас могут быть два документа с одной и той же группой авторов, но это не убьет вас.

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

  1. запроса таблицы Авторы, чтобы увидеть, если у вас есть группа Автор с тем же числом author_id в где состояние, что-то вроде:

    выберите кол (1) CNT из авторов где a_id IN (1,2,3)

  2. Если cnt отличается от NUM КОБ author_id с, а затем вставить новую группу

  3. Если cnt равно потом получить идентификатор этой группы авторов:

    select ID 
        from Authors 
        where a_id = 1 
         or a_id = 2 
         or a_id = 3 
    group by 1 
        having count(1) = 3 
    
+0

да, авторы уже третья таблица, поэтому вы предлагаете для изменения этой таблицы, чтобы иметь внешний ключ документа. Хорошо, но таким образом у меня будут записи авторов * записи документов. Я думал о том, как я могу создать группы авторов и связать их с документом, если он уже существует. Вероятно, это не хорошая оценка, так как мне придется проверить, существует ли эта группа авторов. – ePascoal

+1

причиной того, что один идентификатор для группы авторов будет производительностью, если у вас было так много групп, что ваш запрос станет медленным, но, вероятно, вам это никогда не понадобится, и логика избежать дублированных групп «сложна» и не стоит это на данный момент. Лучше копируйте author_id каждый раз для каждого написанного документа, который слишком усложняет ваш код. – mucio