Разработка базы данных mysql и оптимизация запросов - PullRequest
1 голос
/ 08 июля 2011

Я работаю над проектом, в котором мне нужно спроектировать таблицу, такую ​​как управление каталогами.Я просто новичок в DB, ​​поэтому мне очень нужен опыт ваших парней.Моя текущая мысль о дизайне базы данных может быть проиллюстрирована ниже:

 id   name       type        create_time       parent_id
  1   folder1    folder      2011-2-3             
  2   folder2    folder      2011-2-3             1
  3   folder3    folder      2011-2-3             1
  4   folder4    folder      2011-2-3             1
  5   file1      file        2011-2-3             4
  ....

, как вы можете видеть, parent_id указывает на свой собственный идентификатор таблицы PK.ограничение соответствует реальному миру: папки могут содержать папки, файлы не могут иметь дочерние элементы и т. д. ...

наиболее часто используемый сценарий запроса:

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

  2. с учетом идентификатора находит идентификатор всех своих предков (родители, дедушка и бабушка...)

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

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

спасибо за любую помощь.

Ответы [ 2 ]

1 голос
/ 06 октября 2012

Вы можете рассмотреть этот способ:

id    name     -----   type    ----    create_time       parent_id
  1   folder1  ---  folder  --- 2011-2-3               
  2   folder2  ---  folder    ---  2011-2-3       -----      1
  3   folder3   --- folder    ---  2011-2-3      -----       2-1
  4   folder4  ---  folder    ---  2011-2-3       -----      3-2-1
  5   file1    -----  file      -----  2011-2-3    -----         4-3-2-1

Поместите информацию об иерархии в parent_id, в которой указаны все его предки.

Когда вы хотите добавить новую папку в folder4, например, вы можете простоприсоедините 4- к значению parent_id folder4 и сделайте его parent_id вашей новой папки.

Таким образом, вам не нужно рекурсивно выяснять всех предков.

0 голосов
/ 08 июля 2011

Архитектура с parent_id не подходит для перечисления всех родительских узлов и всех дочерних узлов - для этого вам понадобится рекурсивная процедура.

взгляните на эту статью http://www.sitepoint.com/hierarchical-data-database-2/, единственная проблема - добавление записей, но ее можно упростить с помощью триггеров

Для правильных индексов см. Комментарий от Давиде Пирас

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