База данных SQL - Максимальное значение одного столбца для другого столбца таблицы - PullRequest
0 голосов
/ 26 апреля 2019

Я проектирую свою базу данных и имею 3 таблицы:

1) Authors таблица имеет идентификатор, имя, фамилию и идентификатор_строки. Сочетание имени и фамилии является уникальным.

2) Topics таблица имеет TopicName, SOTAResult и Paper_ID. TopicName, SOTAResult являются уникальными.

3) Papers таблица имеет заголовок (уникальный), результат, реферат.

Я создаю его таким образом, потому что в статье есть несколько авторов и несколько тем, но один результат. Мой вопрос заключается в том, что я хочу назначить максимальное значение из столбца результатов в таблице «Документы» для столбца SOTAResult в таблице «Темы». Более четко SOTAResult должен быть максимальным значением Result of Papers по одной теме. Мне также интересно, правильно ли я построил эту базу данных в соответствии со своими потребностями или я должен что-то конкретно изменить.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2019

Я бы добавил таблицу PapersAuthors, чтобы облегчить авторам создание нескольких документов.Я бы добавил таблицу TopicsPapers, чтобы в теме могло быть несколько статей, а статья могла быть в нескольких темах.Если статья не должна быть в нескольких темах, не используйте TopicsPapers и не помещайте topic_id в Papers.

Я не уверен, что понимаю, чего вы пытаетесь достичь с помощью SOTAResult, но я верю, что вы хотитенайти "лучшую статью" по теме.В этом случае переместите SOTAResult в Papers и найдите его, используя подзапрос «limit 1»:

SELECT t.*, (SELECT paper_id FROM Papers AS tp WHERE tp.topic_id=t.topic_id ORDER BY SOTAResult DESC LIMIT 1) AS top_paper FROM Topics AS t;
0 голосов
/ 26 апреля 2019

Требуется отношение m: n между авторами и статьями: один автор может написать много статей, а одна статья может быть написана многими авторами.Это достигается с помощью таблицы моста:

  • таблица author (author_id, first_name, last_name, ...) <= с уникальным ограничением на <code>first_name + last_name, первичный ключ - author_id
  • таблица paper (paper_id, title, result, ...) <= с уникальным ограничением на <code>tiltle, первичный ключ - paper_id
  • таблица author_paper (author_id, paper_id) <= с уникальным ограничением на <code>author_id + paper_id

Youтакже требуется отношение m: n между статьями и темами:

  • таблица topic (topic_id, name, ...) <= с уникальным ограничением на <code>name, первичный ключ - topic_id
  • таблица paper_topic (paper_id, topic_id) <= с уникальным ограничением на <code>paper_id + topic_id

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

select t.name as topic_name, max(p.result) as max_result
from paper_topic pt
join paper p using (paper_id)
join topic t using (topic_id)
group by t.name
order by t.name;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...