Практичный дизайн для ссылок на поля таблиц - PullRequest
0 голосов
/ 13 января 2010

Проблема, с которой я сталкиваюсь, состоит в том, чтобы придумать хороший дизайн модели для обычного стола. На таблицу «заметки» должны ссылаться разные объекты. Я подумал, что один из способов состоит в том, чтобы определить 2 поля: тип объекта, идентификатор объекта для записи типа и объект, к которому относится примечание. Тогда я не уверен, что это лучшая практика. Когда дело доходит до создания списка заметок и названий объектов, к которым они принадлежат, я должен выполнить запрос для каждого типа объекта и объединить их все вместе с объединением. Другой подход, который приходил мне в голову, состоял в том, чтобы добавить столько полей, сколько имеется типов объектов, и просто объединить все эти таблицы с примечаниями в запросе. Буду признателен за любые комментарии по этому вопросу.

Ответы [ 2 ]

3 голосов
/ 13 января 2010

Если для одного объекта существует не более одной заметки, добавьте пустое поле noteid к таблице каждого объекта.

Если такого ограничения нет, наиболее нормализованный подход заключается в создании таблицы связывания для каждой отдельной таблицы типов объектов , содержащей noteid и objectid, с парой идентификаторов в качестве первичного ключа. и каждый из них ссылается на свою соответствующую таблицу; это также учитывает случай, когда один объект связан с более чем одной заметкой, или одна заметка связана с более чем одним объектом. Кроме того, поля, которые можно обнулять, не вводятся, но запросы становятся более сложными. Для повышения производительности может потребоваться проиндексировать каждую такую ​​таблицу в обоих направлениях.

Типовое кодирование (то есть столбец с указанием применимого типа), хотя это очень распространенная практика, значительно ослабляет целостность модели данных. Даже если вы используете таблицу разрешенных значений, у вас все еще будет непроверенное дублирование между строками в таблице разрешенных значений и определениями связанных таблиц.

0 голосов
/ 13 января 2010

Ваш первый метод верен, я верю. Либо это, либо таблица M2M, сидящая между двумя столами, которая отслеживает отношения.

С точки зрения строгой модели данных иметь тип в таблице примечаний неверно, потому что примечание не является специфическим для типа, это просто примечание. Таким образом, хранение этой информации в таблице M2M кажется более правильным. Однако M2M сложнее, и в зависимости от вашей структуры это может быть нежелательно.

Надеюсь, это поможет!

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