Как я могу анализировать программно, чтобы понять, а между двумя таблицами существует отношение «многие ко многим»? - PullRequest
1 голос
/ 17 июля 2011

Когда я смотрю схему БД или диаграмму, очевидно, что между двумя таблицами существует отношение «многие ко многим».

Но как я могу проанализировать это с компьютерной точки зрения??Какой тип тестового алгоритма должен следовать коду, чтобы решить, существует ли отношение «многие ко многим» между TableA и TableB?

Я был бы признателен, если бы вы могли предложить способ без использования каких-либо конкретных языковых методов или помощников.

Что-то вроде:

«Если« this »истинно, то между двумя таблицами существует абсолютное отношение« многие ко многим »."

Так что я должен написать в месте «это»?

Спасибо

Ответы [ 5 ]

1 голос
/ 18 июля 2011

«Если« this »истинно, то между двумя таблицами существует абсолютная связь« многие ко многим ».

Так что же мне написать вместо« this »?

  • Существует третья таблица.
  • Она включает в себя как минимум два внешних ключа: как минимум один ключ-кандидат из TableA и как минимум один ключ-кандидат из TableB.1011 * Для этой пары внешних ключей есть ограничение PRIMARY KEY или NOT NULL UNIQUE.
1 голос
/ 18 июля 2011

Я думаю, что это очень сложная проблема, потому что вы можете вывести отношение «многие ко многим», что является бессмысленным в контексте вашего приложения.

Например, таблица Person может иметьвнешний ключ к таблице, PostalAddress (описывающий, где они живут) и внешний ключ к таблице CoffeeMachine (описывающий, какую кофемашину им разрешено использовать).

Опираясь на наличие таблицы с внешними ключами длядве другие таблицы могут привести вас к выводу, что существует много-много-многозначная связь между PostalAddress и CoffeeMachine (кофемашины, используемые людьми, живущими по определенным адресам), которая, вероятно, не имеет отношения к контексту приложения.

Вы также не должны полагаться на таблицы связей, имеющие только внешние ключи, с другими таблицами, поскольку могут существовать другие атрибуты, которые описывают что-то об отношениях (например, роль, которую человек выполняет в конкретном проекте).1008 * Хотя мы используем таблицы ссылок для моделирования отношений многие ко многимps, я не думаю, что в такой таблице есть что-то такое, что позволяет вывести обратное.

0 голосов
/ 18 июля 2011

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

Когда я смотрю схему БД или диаграмму, это очевидно чтобы выяснить, существует ли отношение «многие ко многим» между двумя таблицами.

Это так?Попробуйте это:

  • Существует ли отношение «многие ко многим» между Child и Test?
  • Существует ли отношение «многие ко многим» между Parent и Test?

db:

Parent
------
id
PRIMARY KEY: id

Child
-----
id
parentid
... other data
PRIMARY KEY: id
FOREIGN KEY: parentid
    REFERENCES Parent(id)

Test
----
testid
... other data
PRIMARY KEY: testid

BestChild
---------
testid
parentid
childid
... other data
PRIMARY KEY: (testid, parentid)
FOREIGN KEY: (childid, parentid)
    REFERENCES Child(id, parentid)
FOREIGN KEY: testid
    REFERENCES Test(id)
0 голосов
/ 18 июля 2011

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

0 голосов
/ 18 июля 2011

Существует таблица C, не равная A или B, с внешними ключами, соответствующими первичным ключам в A и B.

Просто предположение.Я думаю, что это правда, хотя;это, конечно, случается, когда вы хотите иметь отношения с м2м ... Когда это только случается, я думаю, вы в порядке, читая отношения с м2м.

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