2013-05-22 3 views
0

Мой вопрос заключается в том, как узнать из схемы SQL-DDL, что отношение является «один к одному» или «многие ко многим» или «один ко многим»?Как узнать мощности из схемы SQL-DDL?

Спасибо,

+1

SQL Server или другой? Какие инструменты вы используете, если не SSMS для SQL Server? – gbn

ответ

2

Отношение один к одному будет иметь первичный ключ или ограничение уникальности на обоих концах.

Отношение «один ко многим» будет иметь первичный ключ или уникальное ограничение только на одном из двух концов.

Отношение «многие ко многим» будет иметь третью таблицу с неповторимыми внешними ключами для двух других таблиц. (Которые вместе будут составлять первичный ключ для этой таблицы.)

+0

«один-к-одному» также может означать «один-к-одному» или «один-к-одному»), просто строка «один-ко-многим» также может означать «один-к-одному» или «нуль-много», ,Невозможно вычесть это из модели –

1

Только если у вас есть внешние ключи, чтобы связать сущностям

  • Они покажут 1:x..y отношения где х 0 или 1, у 1 до N
  • На столе с ограничением внешнего ключа:
    • x не может быть определено из DDL. То есть принудительное выполнение обязательной дочерней строки не может быть сделано легко. См http://en.wikipedia.org/wiki/Cardinality_%28data_modeling%29 для обозначения
    • Уникальных на этом столбце означает, что у = 1
    • неуникальных средств у = Н

таблица ссылки для реализации N: N будет иметь два таких отношений

Это видно на диаграмме базы данных, которую вы можете создавать из встроенных или сторонних инструментов. Примеры:

  • управления SQL Server Studio
  • MySQL Workbench
+1

Я не думаю, что утверждение 'NOT NULL означает x = 1' истинно. Потому что, если у вас нет строки в «дочерней» таблице, у вас действительно есть соотношение 1: 0. «Истинное» отношение 1: 1 (или 1: n с n> 0) не может быть принудительно применено с регулярными ограничениями SQL (по крайней мере, я не могу придумать способ) –

+0

@a_horse_with_no_name: true. Плохая формулировка. Я основывал это на http://en.wikipedia.org/wiki/Cardinality_%28data_modeling%29. Обновлено – gbn

0

Вы не можете прочитать их непосредственно из схемы. Однако, если вы предполагаете, что автор схемы был очень тщательным при реализации ссылочной целостности, вы можете сделать некоторые выводы. Например:

  • 1: 0..1 == Одна таблица имеет внешний ключ в одном столбце (столбцах) в качестве первичного ключа и указывает на столбцы первичного ключа на другой таблице.
  • 0..N: 0..N == отдельная таблица ссылок, которая имеет внешний ключ, указывающий на таблицу 1, другой внешний ключ, указывающий на таблицу 2, и первичный ключ, охватывающий все столбцы в обоих внешних ключах.
  • 1: 0..N == Единственная безопасная вещь, которую вы можете предположить, если ни один из остальных не является истинным, и есть внешний ключ, указывающий на другую таблицу.

NB: Те же выводы также могут быть сделаны, если внешний ключ указал на уникальное ограничение вместо первичного ключа.

+1

"* в противном случае оно имеет минимальное значение одного *". Это неправда. У вас может быть столбец NOT NULL и все еще есть «один-к-одному» (не вставляя строку в связанную таблицу) –

+0

@a_horse_with_no_name: Хорошо, я обновил свой ответ. –

Смежные вопросы