Как Вы имеете дело с m.. n отношения в реляционной базе данных?

Готово

http {
    ## load whitelist
      map $remote_addr $deny {
        default 0;
        include /path/to/whitelist.txt;
}

server{
    ## check
    set $is_white_list 0;
    if ($request_uri ~ ".*men.*"){
      set $is_white_list 1;
    }
    if ($deny) { 
      set $is_white_list 1$is_white_list;
    }
    if ($is_white_list = 1) {
      return 403;
    }
    ##// epg check
}
17
задан Bill the Lizard 8 October 2008 в 17:09
поделиться

9 ответов

Добавьте другую таблицу под названием BookAuthors со столбцами для BookID, AuthorID и NameUsed. Нулевое значение для NameUsed означало бы вытягивать его от таблицы Автора вместо этого. Это называют таблицей Intersection.

30
ответ дан 30 November 2019 в 10:43
поделиться

Для 1.. n отношения (у автора есть много книг, у автора есть много псевдонимов):

  1. Помещенный внешний ключ author_id в Книгах, указывающих на автора.
  2. Составляют новую таблицу, author_aliases, для содержания информации псевдонимов.
  3. Помещенный внешний ключ alias_id в Книгах, указывающих на псевдоним (nullable, если детали автора являются defaul).
  4. Помещенный author_id внешний ключ в author_aliases.

, При необходимости можно использовать посреднические таблицы для соединения авторов и книг, но с 1.. n отображение я не думаю, что это необходимо.

Для n.. m отношения (у автора есть много книг, книга имеет многих авторов):

необходимо было бы использовать посредническую объединяющую таблицу (author_id, alias_id, book_id) вместо внешних ключей в книжной таблице. Вы захотите сохранить внешний ключ от псевдонимов до автора (для легкого поиска псевдонимов автора, не имея необходимость идти с помощью всех их книг).

можно утверждать, что с точки зрения масштабируемости в будущем это - лучший способ начаться также, даже если начальная спецификация говорит, что что-то - 1.. n отношения. Вы найдете, что спецификации (или вопрос), как дали часто являются несоответствующими, таким образом, Вы захотите разработать общим способом для того, когда спецификации изменятся или разъяснены.

0
ответ дан 30 November 2019 в 10:43
поделиться

Вам были бы нужны три таблицы -

  1. Книжный
  2. Автор
  3. , Книга BookAuthors

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

Автор содержал бы идентификатор автора, а также другую информацию, такую как Имя, фамилия, которую необходимо собрать о любом данном авторе.

BookAuthors был бы соединением many-many, содержа BookID, AuthorID и NameUsed. Это позволило бы книге иметь или нуль или многих авторов, чтобы автор имел или обнулил или много книг, и для получения информации о тех отношениях, которые будут получены. У Вас мог также, например, быть столбец на таблице BookAuthor, которая описала отношения автора к книге ("Отредактированный", "Переднее слово").

7
ответ дан 30 November 2019 в 10:43
поделиться

Это походит на many-many отношения, не 1-many. Я думаю, что Вы захотите использовать таблицу между теми двумя, которая позволяет Вам определять 1-many по обе стороны от этого. Проверьте это...

http://www.tekstenuitleg.net/en/articles/database_design_tutorial/8

3
ответ дан 30 November 2019 в 10:43
поделиться

Я думаю, что Вы в значительной степени там. Вам нужны таблица Books, таблица Authors и затем "authors_of_books" таблица с первичным ключом книги, первичным ключом автора, и "процитированный в качестве" текстового поля, показывающего, как тот конкретный автор был процитирован на той книге.

6
ответ дан 30 November 2019 в 10:43
поделиться

Учитывая, что доктор Bob и доктор Robert и Bob, доктор философии является всем одинаковым человек, они связались бы с той же строкой в таблице авторов.

Однако я думаю, в чем Вы нуждаетесь, таблица человека, на которую это создает ссылки. Вы могли также связать свою интересную таблицу человека с ним. Тем путем Автор Bob и Автор Robert, а также Интересный Bob связываются с Человеком Bob. Надежда, которая имеет смысл.

1
ответ дан 30 November 2019 в 10:43
поделиться

Первая вещь, которая приходит на ум, состоит в том, чтобы иметь таблицу ссылки, возможно, названную AuthorOf для соединения книг с их авторами.

столбцами был бы AuthorID, BookID и возможно CreditAs, таким образом, можно дифференцироваться между доктором Bob и Bob, доктором философии (А также псевдонимы как Stephen King и Richard Bachman).

И можно все еще однозначно определить автора.

1
ответ дан 30 November 2019 в 10:43
поделиться

Действительно похоже, что Вы желаете создать ряд пользовательских объединяющих таблиц, которые используются для соединения объектов от одного объекта до другого.

я запустил бы на самом детализированном уровне, человеке и сказал бы, что ЛЮБОЙ автор должен быть человеком. Я упростил бы тот процесс.

Составляют таблицу человека с информацией о человеке и PersonId, помещают информацию там.

Затем составляют таблицу BookAuthors, с 3 столбцами BookId, PersonId, TitledName. Таким образом, можно использовать другое имя в случае необходимости, в противном случае можно использовать COALESE или что-то подобное для получения имени по умолчанию, если TitledName является пустым.

Просто идея..

1
ответ дан 30 November 2019 в 10:43
поделиться

Что Вы спрашиваете, действительно не то, как Вы имеете дело с 1.. n отношения, но n.. n отношения (как эффективно на авторе и имеют много книг и одну книгу, может иметь многих авторов).

классический способ обработать это через промежуточную таблицу, таким образом

таблица Author (созданный, authorDetails) таблица Book (bookID, книжные детали) таблица AuthorBook (созданный, bookID)

, Если Вы действительно побеспокоены об изменяющихся именах автора затем, использует 1.. n автор детализирует таблицу, поэтому добавьте

AuthorDetails (созданный, itemID, authorDetails)

и удалите authorDetails из таблицы

автора
1
ответ дан 30 November 2019 в 10:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: