Таблица с 2 полями, но только одно можно использовать одновременно - PullRequest
1 голос
/ 24 ноября 2010

Как бы вы спроектировали базу данных, в которой есть таблица с 2 полями, и только одно из них может быть установлено за один раз, без слишком большой избыточности? Например, файловая система:

Допустим, у нас есть таблица с дисками, одна с папками и одна с файлами.

Диски и файлы довольно тривиальны. Однако у папок есть родительский элемент, который может быть папкой (в этом случае ссылка на ту же таблицу) или диском (в этом случае ссылка на строку диска).

Не могли бы вы добавить несколько дополнительных таблиц?

Ответы [ 2 ]

3 голосов
/ 24 ноября 2010

Одна таблица с идентификатором, именем, парентидом и (если хотите) типом.Папки и файлы указывают на своих родителей парентидом.Диски не имеют парентид.Единственное поле, которое имеет значение NULL, - это поле парентид (относительно немного) записей типа Disk.

0 голосов
/ 25 ноября 2010

Исправлена ​​незначительная ошибка 26 ноября 10

Я не понимаю, зачем вам три файла (они не являются "таблицами" в базе данных, пока они не нормализуются вместе).

Если контент, который вы на самом деле имеете дело с дисками; папки; файлы, то они все файлы. Это приводит к известной проблеме дерева каталогов, которая была решена в Unix I-Nodes, но остается проблемой в любой файловой системе MS.

  • Узлы самого высокого уровня имеют имена файлов в форме "X:" (диск)

    • У них нет родительских узлов

    • Используйте CHAR (0) вместо Null (это замена, устраняющая проблемы Null в базе данных и, следовательно, устраняющая проблему с производительностью; она не решает проблему Null, поскольку у накопителей нет родителя. еще нужен код).
      .

  • Не два или три отдельных и несопоставимых файла с огромным дублированием данных и аномалиями обновления (вы спрашивали ответ для разработки базы данных, верно?). Это не тривиально.

  • Нет слепо вставляющих Id-iot "ключевых" столбцов на все, что движется

  • Если IsFolder, то узел - это ветвь в дереве каталогов, папка; в противном случае это файл.

  • Файлы могут быть переведены в папки: установите для IsFolder значение true; после чего затем может использоваться как ParentNode. Если у вас есть стандарт SQL ISO / IEC / ANSI, вы можете реализовать ограничение CHECK, чтобы гарантировать, что ParentNodes IsFolder

  • Если строка не является IsFolder файлом, ее нельзя использовать в качестве папки или родительского узла.

  • Имена файлов должны быть уникальными в пределах узла (папки), поэтому указывается уникальный индекс. AK - стандартное обозначение альтернативного ключа, означающего уникальный индекс.

Модель данных каталога http://www.softwaregems.com.au/Documents/Student%20Resolutions/Andrew%20DM.pdf

▶ Ссылка на нотацию IDEF1X ◀ для читателей, не знакомых со стандартом реляционного моделирования.

Ответ на комментарий

  1. Некоторые комментаторы считают, что в этой модели есть "дублирование" или что FileName сцеплено. По-видимому, это связано с невозможностью прочитать модель, которая представлена ​​в стандартной записи. Или неспособность распознавать сильно нормализованные структуры.

    • существует дублирования не существует

    • Имена файлов: атомарные , например, CHAR (30), а не полный путь или URL.

    • Атомные означает, что имена файлов не сцеплены

    • Имена файлов не дублируются внутри узла. Если то же имя файла используется в другом узле, это не дублирование, это реальность, и это разрешено.

    • Сильно нормализованные структуры на самом деле очень маленькие и краткие.

  2. Я бы попросил любого, кто испытывает затруднения с пониманием этой модели, опубликовать конкретный вопрос , а не делать заявления по темам, которых они не знают.

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

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