Можно ли использовать составные первичные ключи, чтобы помешать вам связать несвязанные объекты? - PullRequest
0 голосов
/ 20 октября 2011

Если у меня есть пара моделей (назовите ваш любимый фреймворк):

# pseudo-code
class Fruit
    primary_key = CompositeKey(tenant_id, object_id)
    weight = DecimalField()

class Restaurant
    primary_key = CompositeKey(tenant_id, object_id)
    haz_cheeseburger = BooleanField()
    fruit_available = ForeignKey(Fruit)  # <-- important part

Возможно ли иметь ограничение базы данных, которое сделает невозможным вставку части Resaturant who tenant_idиз первичных ключей указывает на TenantA, а кто fruit_available s tenant_id указывает на TenantB.В основном, защитите меня от случайно связанных объектов, принадлежащих различным арендаторам.

1 Ответ

1 голос
/ 20 октября 2011

Если я вас правильно понял, вы можете установить внешний ключ. В ресторане столик,

FOREIGN KEY        (tenant_id, fruit_available) 
  REFERENCES fruit (tenant_id, fruit_available)

Частично это зависит от вашей базы данных и частично от того, существует ли какое-либо уникальное ограничение на fruit (tenant_id, fruit_available).

Это не помешает вам использовать неправильный tenant_id как часть первичного ключа Restaurant.

...