Идентификационные отношения один-ко-многим в sql

У меня есть большая проблема, с которой я сталкиваюсь прямо сейчас. Я проектирую базу данных, когда у меня есть сильная сущность "КЛИЕНТ" со слабой сущностью "AFFILIATE", у которой первичный ключ сам по себе объединен с первичным ключом родителя. Идентифицирующая связь между ними должна быть "ОДИН-НА-МНОГО" отношения и общее участие. Но моя проблема в том, что в SQL, поскольку первичный ключ AFFILIATE должен определяться его дискриминатором и первичным ключом родителя, отношение один ко многим будет неэффективным, например, в AFFILIATE будет возможно иметь один id_affiliate, связанный с много id_client. Пожалуйста, помогите мне.

3 ответа

Это совсем не необычная установка, есть ли у вас конкретные основания полагать, что она будет неэффективной?

Клиент должен иметь кластерный первичный ключ id_client. Партнер должен иметь кластерный первичный ключ id_client + id_affiliate.

Объединение между ними представляет собой простой поиск по b-дереву без дополнительного перехода к поиску страниц (из-за ключа кластеризации), и все филиалы для данного клиента, вероятно, будут на одной странице данных, поэтому поиск будет быть очень быстрым

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

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

Если это отношение является обязательным, вы не будете страдать от неэффективности, если это необязательное отношение, то в контексте модели реляционной базы данных не будет существенной разницы в ваших отношениях сильных и слабых сущностей.

На самом деле, в своем вопросе вы отвечаете на свой вопрос:

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

Это не проблема, вот как это работает.

@ Джон Ву и @Hituptony, большое спасибо за помощь, и проблема, с которой я столкнулся, теперь решена. На самом деле, я не очень хорошо понимал концепцию "набора слабых сущностей", где у нас могут быть слабые сущности с одинаковым дискриминатором, но представляющие разные объекты, поскольку они связаны с разными сильными сущностями. Например, у нас могут быть одинаковые affiliate_id, но они представляют разных филиалов разных клиентов.

Другие вопросы по тегам