От одного до многих отношений в базе данных MySQL (Workbench)? [dубликат]

Можете попробовать:

  if (! array [i]) array [i] = true;   

Но на самом деле единственный способ узнать наверняка - это профиль, я уверен, что любой компилятор видел бы сравнение с ложным как ненужное и оптимизировал его.

3
задан Poni 30 August 2010 в 00:29
поделиться

3 ответа

Для первого вопроса:

  1. Создайте уникальное ограничение для обоих столбцов
  2. Убедитесь, что вы всегда сортируете столбцы. Поэтому, если ваша таблица имеет colummns a и b , чем убедитесь, что a меньше или равно b

Для второго вопроса:

  SELECT * FROM many_to_many_table ГДЕ a = A или b = A  
2
ответ дан Wolph 16 August 2018 в 05:10
поделиться
  • 1
    "уникальное ограничение" ? Извините, но я не говорю SQLish (: Не могли бы вы объяснить это? Я знаю о внешних ключах - если это то, что вы имели в виду, тогда нет, я не могу этого сделать, потому что идентификаторы из целой другой базы данных. Есть ли решение? Что касается пункта № 2, я тоже не взял на себя этот вопрос. Только ответ на второй вопрос понятен. Я благодарю вас за пациента и добрую волю, действительно, спасибо. – Poni 30 August 2010 в 00:21
  • 2
    @Poni: вы можете создать уникальное ограничение для обоих столбцов. Или первичный ключ в обоих столбцах (посмотрите на пример staticsan для этого). Ниже приведены документы о том, как создать уникальное ограничение: dev.mysql.com/doc/refman/5.1/en/… alter table many_to_many_table добавить уникальный индекс (a, b); – Wolph 30 August 2010 в 01:35
  • 3
    Первичный ключ на обоих столбцах сделал бы пару уникальной, хотя еще одну комбинацию этой пары можно было бы добавить, чего я не хочу. 1 - 2 & amp; 2 & л; - & GT; 1. Второй не нужен. – Poni 30 August 2010 в 01:52
  • 4
    @ Пони: как я уже объяснил в своем ответе. Если вы убедитесь, что a всегда является меньшим ID при вставке / обновлении, чем ограничение работает отлично. – Wolph 30 August 2010 в 04:32

Ok WoLpH был быстрее, я в основном согласен (обратите внимание, что вам нужно создать ограничение single на обоих столбцах одновременно!). И просто объясните, почему вы сталкиваетесь с правилами, которые вы упомянули: Как правило, A и B - разные таблицы. Таким образом, типичный пример для отношений n: m позволит вводить записи (1,0) и (0,1), потому что они будут ссылаться на разные пары. Наличие таблицы A = таблица B - это другая ситуация (вы используете пользователей A и B как пользователей, но в примере они являются таблицами).

0
ответ дан Nicolas78 16 August 2018 в 05:10
поделиться
  • 1
    Николас благодарит вас за поддержку - извините, если я вас не понимаю, или WoLpH. Проверьте наш комментарий к его ответу, я бы уточнил более интересные слова! – Poni 30 August 2010 в 00:22

Похоже, что вы хотите создать составной первичный ключ.

  CREATE TABLE отношение (A_id INTEGER UNSIGNED NOT NULL, B_id INTEGER UNSIGNED NOT NULL, PRIMARY KEY (A_id, B_id));   

Так вы настраиваете таблицу так, что может быть только одна строка, которая определяет таблицы A и B как связанные. Он работает, потому что первичный ключ должен быть уникальным в таблице, поэтому база данных будет иметь только одну строку с любой определенной парой значений. Вы можете создавать составные ключи, которые не являются первичным ключом, и они не обязательно должны быть уникальными (но вы можете создать уникальный непервичный ключ, составной или нет), но ваша спецификация запросила первичный ключ, так что это то, что я

Вы можете, конечно, добавить другие столбцы для хранения информации об этих конкретных отношениях.

1
ответ дан staticsan 16 August 2018 в 05:10
поделиться
  • 1
    Спасибо, что нашли время, чтобы ответить статикану! Ну, код, который вы опубликовали, не достигает этого, но ваше описание - моя цель. Почему это не работает? Это точный код, который я использую для создания таблицы: CREATE TABLE ЕСЛИ НЕ СУЩЕСТВУЕТ db_relations . [D1] tbl_relations ( id_a INT НЕ ПОДЛЕЖИТ НОМЕР, ] id_b INT НЕОПРЕДЕЛЕН НЕ НЕТ, ПЕРВИЧНЫЙ КЛЮЧ ( id_a , id_b )) ENGINE = InnoDB; – Poni 30 August 2010 в 00:38
  • 2
    Я предположил, что у вас есть два разных типа объектов, таких как человек и почтовый адрес, как это было предложено в описании «таблицы A» и «таблицы B». Это означает, что ссылка на «таблица A» будет всегда находиться в id_a , а ссылка на «таблица B» будет всегда находиться в id_b , что и в противном случае, не имеет смысла. Или быть полезным. – staticsan 30 August 2010 в 04:12
Другие вопросы по тегам:

Похожие вопросы: