База данных, как смоделировать отношения 1: 1 - PullRequest
0 голосов
/ 10 января 2011

(VS2008, SqlCE 3.5)

Я пытаюсь смоделировать отношения 1: 1 .Поэтому я поместил внешний ключ в родительскую таблицу, держа PK дочерней таблицы.Затем я установил внешний ключ в UNIQUE.Тем не менее, когда я создаю свои классы сущностей (с помощью SqlMetal), дочерний класс имеет ссылку на EntitySet родительского класса, а не просто на одну сущность.Это похоже на отношение m: 1 ?Так что мне нужно сделать, чтобы сделать это 1: 1?


РЕДАКТИРОВАТЬ1:

Я в замешательстве .. Пытаюсь сделать набор, например:

StrategySet(ID, EntryStrategyID{Unique}, ExitStrategyID{Unique})   
EntryStrategy(ID) 
ExitStrategy(ID) 

Это м: 1 не так ли?Хотя похоже, что FK находятся в родительском объекте, или мы не назвали бы StrategySet родительским?И как бы я теперь изменил это тоже 1: 1?

Ответы [ 3 ]

1 голос
/ 10 января 2011

Если все столбцы в EntryStrategy и ExitStrategy одинаковы, то все, что вам нужно, это просто (добавьте также все остальные столбцы).1008 * и ExitStrategy имеют несколько разных столбцов, затем используйте это.Сохраните все общие столбцы в таблице Strategy.EntryStrategy и ExitStrategy имеют только отдельные столбцы для каждого из них.

alt text

Здесь также приведен общий пример 1:1 из-за вертикального разделения таблицы.*

До :

alt text

После :

alt text

1 голос
/ 10 января 2011

Прежде всего, parent - это таблица, на которую ссылается FK из child.Таким образом, вы не можете сказать, что ваша родительская таблица ссылается на дочерний элемент: это не правильно.

Во-вторых, отношения 1: 1 могут быть установлены через:

  • Первичные ключи в обеих таблицах
  • Первичный ключ в родительском и Уникальный внешний ключ в дочернем *

Итак, в вашем случае архитектура верна.Я полагаю, вам следует еще раз проверить структуру и просмотреть эту статью .

0 голосов
/ 10 января 2011

Дайте мне понять ситуацию, которую вы описываете.

У вас есть набор полей, которые составляют «Стратегию».Подмножество полей концептуально является «EntryStrategy», а непересекающееся подмножество полей - «ExitStrategy».

В вашем случае данный набор значений, составляющий «EntryStrategy», может быть объединен с одним и только одним набором значений, составляющих «ExitStrategy».Это то, что вы имеете в виду, когда говорите, что есть переписка 1: 1.

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

Если вы могли бы иметь несколькоExitStrategies для единственного EntryStrategy, тогда у вас будет две таблицы с EntryStrategy, являющимся родительским, и ExitStrategies, являющийся дочерним, и записи ExitStrategy будут иметь Внешний ключ, указывающий на родительскую запись EntryStrategy.

Если бы вы могли иметь несколько EntryStrategies для одного ExitStrategy, то у вас было бы две таблицы с ExitStrategy, являющимся родительским, и EntryStrategies, являющийся дочерним, и записи EntryStrategy имели бы Внешний ключ, указывающий на родительскую запись ExitStrategy.

Если бы вы могли иметь несколько EntryStrategies, связанных с несколькими ExitStrategies, то у вас было бы отношение «многие ко многим», для которого требуется третья таблица для поддержания соответствий.

Принципы классического моделирования баз данных поместили бы все ваши поля в одну таблицу.

Как писал Св. Воланд, вы можете применять соотношение 1: 1, имея две таблицы, где внешний ключ вдочерняя таблица - это уникальный индекс.Но две таблицы обычно используются для отношений 1-ко-многим.

Как писал Дамир, вы можете применить соотношение 1: 1, имея три таблицы, в которых третья таблица имеет внешний ключ для каждого из двух других.таблицы и оба поля внешнего ключа помечены как уникальные индексы.Однако обычно вы используете только три таблицы таким образом, когда у вас есть отношение многие ко многим.

Я думаю, вы ожидаете слишком многого от инструментов автоматического моделирования данных, чтобы ожидать, что они будут создавать объекты, представляющиеВаш очень нестандартный подход.

Ответ на ваш главный вопрос прост.Как мне представить отношения 1: 1?Вы помещаете их в одну и ту же запись в одной таблице!

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