2010-08-15 3 views
0

Мне было интересно, существует ли разница между моделированием отношения «один к одному» и отношением наследования (Table-Per-Type). В обоих случаях мы добавляем ключ foreing с ограничением UNIQUE, или когда-то FK является частью PKМоделирование отношения «один к одному» в базе данных такое же, как моделирование «наследования»?

Мне кажется, что структура таблицы такая же, но, возможно, я чего-то не хватает.

Заранее спасибо.

ответ

1

Это просто перефразирование того, что другие отвечаем, но я всегда говорю, разница в не в структуре таблицы (которая на самом деле то же самое), но и в мощностных ограничений внешнего ключа:

  • в обоих случаях у вас есть таблица T1 с внешней клавишей F ", указывающей на" (т.е. содержащей значения) ключа P другой таблицы, T2;
  • в обоих случаях, каждый F указывает на другой P (P и F оба являются уникальными);
  • В обоих случаях каждый F фактически указывает на P (P и F оба не являются NULL);
  • в случае наследования не каждый P всегда встречается как значение F;
  • в случае переписки один-к-одному, каждый Р всегда происходит как значение F.
1

Когда дело доходит до моделирования, взаимно однозначное отношение между объектами указывает, что они являются одной и той же реляционной таблицей. «Ключ, весь ключ и ничего, кроме ключа, так помогите мне Кодд!»

+1

Только тогда, когда соотношение также общая на обоих концах. – reinierpost

+0

im потеряно здесь. Мы могли бы хранить два объекта (которые находятся в взаимно-однозначном отношении между собой) в одной таблице, и мы могли бы также хранить их в двух таблицах, имеющих один и тот же PK .. но каждый из которых лучше? или, может быть, думать о неправильном пути =) – pleasedontbelong

+0

@pleasedontbelong: с точки зрения реляционного моделирования они являются одной и той же таблицей. Однако, когда дело доходит до * реализации * объектно-ориентированной схемы в базе данных SQL, вам, вероятно, будет лучше с двумя отдельными таблицами. –

3

Есть несколько перестановок этого. Вот некоторые из них: - Предположим, что A может существовать только с B, а B может существовать только с A. Тогда отношение взаимно однозначно. - Предположим, что A может существовать один, а B может его расширить, но B не может существовать в одиночку. Тогда отношение является наследованием. - Предположим, что A не может существовать в одиночку, но может существовать либо с B, либо с C. Тогда отношение является наследованием.

+0

Я бы сказал, что второй пример - это простое наследование объекта, а третья - когда суперкласс является абстрактным, верно? – pleasedontbelong

+0

Правильно. Конечно, вы можете иметь абстракцию на любую глубину, а абстрактное отношение может иметь несколько наследств –