Один многим к себе

Вы сравниваете яблоко с апельсином, если сравниваете GraphQL с ElasticSearch. Это совершенно разные технологии.

GraphQL - это технология уровня API, которая сравнивается с REST. Он в основном определяет формат запроса / ответа и структуру вашего HTTP на основе API. Это не другой NoSQL, который поможет вам эффективно хранить и запрашивать данные.

Если вы используете GraphQL, вам все равно нужно самостоятельно запрашивать данные, которые могут фактически храниться и поступать из NoSQL, SQL DB, ElasticSearch или другого веб-сервиса или блаблабла. GraphQL не заботится о том, где вы храните данные, данные могут даже храниться в нескольких источниках данных. Его волнует, что вы говорите ему, как получить данные.

Вернемся к вашему случаю. Скорее всего, вы можете использовать ElasticSearch для эффективного хранения и поиска данных. И поместите GraphQL перед ElasticSearch так, чтобы пользователи / разработчики взаимодействовали со службой через GraphQL API, чтобы воспользоваться преимуществами GraphQL .

5
задан Onorio Catenacci 1 October 2008 в 21:54
поделиться

9 ответов

Ну, это - "нормальная" связь "один ко многим" и метод, который Вы предлагаете, классический для решения его.

Обратите внимание, что две таблицы денормализовываются (я не могу указать точно, где superkey-is-not-well-should-be-subset-of-other-key-fsck-I-forgot часть, но я вполне уверен, это там где-нибудь); интуитивная причина состоит в том, что кортеж в первом соответствует самое большее кортежу во втором, поэтому если у Вас нет большого количества животных с пустыми идентификаторами родителя и дамы, это не хорошее решение ни в какой перспективе (он ухудшается, производительность - нуждаются в соединении - и не уменьшает требования устройства хранения данных).

6
ответ дан 18 December 2019 в 12:03
поделиться

Я задал подобный вопрос много месяцев назад на веб-сайте MySQL. Я рекомендовал бы смотреть на ответ, который я получил от Peter Brawley относительно этого типа отношений: http://forums.mysql.com/read.php?135,187196,187196#msg-187196

Если бы Вы хотите исследовать тему далее затем, я рекомендовал бы изучить Древовидные Иерархии на Википедию.

Альтернатива предложила архитектуру (который будет полностью нормализован), посмотрел бы что-то как следующее:

Таблица: животное

Идентификатор | имя | порода

Таблица: родословная

animal_id | parent_id | parentType (или родитель или дама)

3
ответ дан 18 December 2019 в 12:03
поделиться

Я думаю, что Ваше расположение, использующее всего одну таблицу, прекрасно. Вы определенно хотите сохранить SIRE_ID и DAME_ID в совпадающем типе данных как идентификатор. Вы также хотите объявить их как ВНЕШНИЕ КЛЮЧИ (возможно иметь точку внешнего ключа назад к той же таблице, и внешний ключ может также быть пустым).

ID INT NOT NULL PRIMARY KEY
SIRE_ID INT REFERENCES TABLENAME (ID)
DAME_ID INT REFERENCES TABLENAME (ID)

Используя это расположение, можно легко искать родительских животных, и Вы могли также создать дерево потомков для данного животного (для Oracle существует ПОДКЛЮЧЕНИЕ),

4
ответ дан 18 December 2019 в 12:03
поделиться

INT является лучшим выбором для столбца ID и лучше удовлетворенный, если необходимо использовать последовательность для генерации уникальных идентификаторов.

Я не вижу преимущества в разделении дизайна в две таблицы.

1
ответ дан 18 December 2019 в 12:03
поделиться

Я не знаю о животноводстве, но оно кажется, что Ваш Sire_ID является родительским элементом, и Dame_ID является родительским элементом?Нет проблем. Одна строка на животное, пустой указатель sire_ и dame_ID для купленных животных, я не предвижу проблем.

[ID],[Sire_ID],[Dame_ID];
0,null,null  (male)
1,null,null  (female)
2,null,null  (female)
3,0,1 (male)
4,0,2 (male)
5,null,null  (female)
6,3,5
7,4,5

и т.д. Вы, вероятно, заполнили бы TreeView или XmlNodeList в некоторое время цикле...

While (myAnimal.HasChildren) {
 Animal[] children = GetChildren(Animal.ID)
 for (int x=0; x<children.length; x++) 
  myAnimal.Children.Add(children[x]);
}

В этом случае, Животное. Детьми является Набор Животных. Поэтому myAnimal. Дети [0].Father возвратился бы, myAnimal..Parent [] мог быть набором своих двух родителей, которые должны работать целых [0], всегда один родитель (родительский элемент), и [1] всегда другой (родительский элемент).

Сделайте идентификатор Автонумерацией PK и присвойте Sire_ID и Dame_ID программно путем возврата идентификаторов его родителей. Никакие отношения внешнего ключа не должны быть необходимыми, хотя оба родительских идентификатора могли сослаться назад к идентификатору, если Вы действительно хотите.

1
ответ дан 18 December 2019 в 12:03
поделиться

Используйте "подключение" пунктом с SQL для сообщения этого который иерархия следовать.

0
ответ дан 18 December 2019 в 12:03
поделиться

Это не действительно связь "один ко многим", если у животного не может быть многих родителей.

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

0
ответ дан 18 December 2019 в 12:03
поделиться

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

0
ответ дан 18 December 2019 в 12:03
поделиться

Кажется, что Вы хотите создать что-то как дерево.

Что относительно чего-то как?:

 ID          Primary Key,
 Parent_ID   Foreing_Key
 ( data )

Существует некоторая функциональность для того, чтобы сделать запросы в таблицах с отношениями к себе. Посмотрите синтаксис Подключения: http://www.adp-gmbh.ch/ora/sql/connect_by.html

0
ответ дан 18 December 2019 в 12:03
поделиться
Другие вопросы по тегам:

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