У меня есть таблица, содержащая объекты, что-то вроде этого:Группировка записей с или без ограничения внешнего ключа
PK ObjectId
FK ObjectTypeId
Description
etc
объекты должны быть сгруппированы. Мне дали ряд предложений, все из которых «работают», а некоторые мне нравятся больше, чем другие. Ни одна из них не идеальна, поэтому я изо всех сил пытаюсь обосноваться на какой-либо конкретной модели.
1/Добавить самореферентный внешний ключ. Это чисто, но не идеально, потому что (а) нет логического родителя (это группа, а не иерархия), и (б) это потенциальная боль для LINQ-to-SQL для прохождения самореферентной иерархии - потребуется проверьте, чтобы увидеть, если текущий объект является «родителем» или «ребенок» объект и т.д.
PK ObjectId
FK ParentObjectId
2/Добавить родительскую таблицу & внешнего ключа. Это добавляет ограничения, но таблица Group не содержит никакой полезной информации - она существует только для предоставления идентификатора GroupId &.
Table Object
PK ObjectId
FK GroupId
Table Group
PK GroupId
3/Добавить GroupID без ограничений или внешнего ключа. Нет целостности данных. Теория состоит в том, что при вставке новой группы объектов каждому объекту присваивается GroupId = первый назначенный ObjectId. Вероятно, самое простое решение &.
например.
ObjectId GroupId
...
15 10
16 16
17 16
...
21 16
22 22
Вопрос, какой из них является лучшим в теории и/или практике, и почему. Или, пожалуйста, скажите мне лучший способ сделать это! Мне лично нравится (2), потому что это нормализовано, но мне говорят, что таблица с одним полем плохой дизайн. Мысли и предложения?
- это ограничения FK, реализованные на сервере sql, и ваши попытки отслеживать их или вы создаете базу данных с метаданными базы данных в ней? –
Не знаете, к какому примеру вы обращаетесь. Я пытаюсь сгруппировать объекты, и они предлагают реализации, чтобы облегчить это требование. –