CouchDB поддерживает ссылочную целостность?

Я плохо знаком с CouchDB и приобретением знаний об этом. Я не сталкивался с поддержкой CouchDB ссылочной целостности. Мы можем создать внешний ключ для поля в документе CouchDB?

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

CouchDB поддерживает ссылочную целостность? И действительно ли возможно сделать поле в документе как Первичный ключ?

13
задан Sundar 23 December 2009 в 06:36
поделиться

2 ответа

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

Что касается того, можно ли сделать поле первичным ключом, первичным ключом является поле _id, но вы можете использовать любой действительный json в качестве ключа для просмотра db. Например, вы можете создать вид ордера с поставщиком в качестве ключа.

что-то вроде

function(doc) {
  if (doc.type == 'order')
    emit(doc.vendor,doc);
}

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

Введение в представления CouchDB

11
ответ дан 1 December 2019 в 23:15
поделиться

Эти вопросы невероятно специфичны для реляционных баз данных.

В CouchDB, или любой другой не-РСУБД, вы не будете хранить свои данные так же, как в СУБД, так что проектирование отношений таким образом может быть не лучшим вариантом. Но, чтобы дать вам представление о том, как это сделать, давайте предположим, что у вас есть документ для продавца и куча документов для заказов, которые должны "соотноситься" с документом продавца.

Нет никаких первичных ключей, документы имеют _ид, который является uuid. Если у вас есть документ для продавца, и вы создаёте новый документ для чего-то вроде заказа, вы можете сослаться на документы продавца _id.

{"type":"order","vendor-id":"asd7d7f6ds76f7d7s"}

Чтобы просмотреть все заказы для конкретного продавца, у вас будет карта вида вроде:

function(doc) { if (doc.type == 'order') {emit(doc['vendor-id'], doc)}}

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

Надеюсь, это немного поможет.

.
8
ответ дан 1 December 2019 в 23:15
поделиться
Другие вопросы по тегам:

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