Порядок элементов, на которые ссылаются Foreign Keys

0

Я думаю о хорошем дизайне БД для этого случая использования:

  • Таблица topics
  • Табличные articles с внешним ключом topic_id
  • Сейчас каждая статья относится к одной теме. В будущих версиях я мог бы изменить это, так что одна статья относится ко многим темам.

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

Любая помощь очень ценится!

Теги:
database
software-design
database-design

2 ответа

1
Лучший ответ

Если количество ссылок на статьи - темы являются переменными, вам нужна таблица ссылок.

Так:

Table Articles
    idArticles   PK, int, auto-increment, not null
    Title        varchar, not null

Table Topics
    idTopics     PK, int, auto-increment, not null
    Title        varchar, not null

Table Topics-have-Articles
    idTopics     PK, FK to Topics:idTopics, not null
    idArticles   PK, FK to Articles:idArticles, not null
    Order        int, not null

Заметки:

  • ПК: первичный ключ
  • FK: ключевой ключ
  • В разделах "Темы-есть-статьи" ПК является (idTopics, idArticles)
  • Вы говорите, что хотите сохранить порядок статей внутри темы. Сначала я установил значение даты. Основываясь на вашем комментарии, я изменил его на значение int (Order). Затем вы можете настроить страницу приложения, чтобы позаботиться об этом заказе.
  • Если вы останетесь с соотношением от 1 до 1, это все равно будет работать, но позволяет легко перейти к n к 1 или к отношениям n.

Потенциальные проблемы с полем заказа:

  • скажем, вы заказываете свои статьи 1,2,3,4,5. Что произойдет, если вы хотите поставить один между 4 и 5? Вы должны переупорядочить их все.
  • скажем, вы заказываете 10,20,30,40. Затем у вас есть 10 слотов для размещения новых статей, но в конце концов вы закончите.
  • это может быть не проблема, если ваше приложение мало. Но вам, возможно, придется написать некоторый код, чтобы переупорядочить ваши статьи о вставке.
  • Это может потребовать другого поиска в SO, как этот: как сохранить поле порядка отображения в php
  • 0
    Спасибо! Я хочу назначить индивидуальный заказ (int position?) И хочу переупорядочить их вручную.
  • 0
    Я отредактировал свой ответ с порядком int вместо поля Date .
Показать ещё 2 комментария
1

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

Это будет отношение "многие-ко-многим", поэтому вам понадобится третья таблица с идентификатором темы и идентификатором статьи. Первичный ключ будет (topic_id, article_id), поэтому у вас есть только одна комбинация статьи-темы. В этой таблице оба, topic_id и article_id являются внешними ключами.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню