Как эффективно моделировать наследование в базе данных?

Правильный дизайн базы данных ms-sql-server не имеет ничего общего с .net правильным дизайном объектов.

Если object-oriented вы планируете использовать database-design базу данных для чего-либо, кроме sql-server простой сериализации ваших inheritance объектов (например, для отчетов, запросов, использования dotnet нескольких приложений, бизнес-аналитики .net и т. д.), то я не рекомендую inheritance какое-либо простое сопоставление mssql объектов с таблицами. .

Многие database-design думают о строке в таблице object-oriented-design базы данных как об объекте database-modeling (я много лет размышлял в oop этих терминах), но строка inheritance не является объектом. Это inheritance предложение. Отношение к .net-framework базе данных (т. е. таблица) представляет sql-server собой некоторую констатацию oop факта о мире. Наличие строки object-oriented-design указывает на то, что факт inheritance верен (и наоборот, ее отсутствие database-modeling указывает на то, что факт inheritance ложен).

При таком понимании inheritence вы можете видеть, что один object-oriented тип в объектно-ориентированной object-oriented-design программе может храниться .net-framework в дюжине различных отношений. А sql-server самые разные типы (объединенные dotnet наследованием, ассоциацией, агрегацией dotnet или совсем неаффилированные) могут ms-sql-server частично храниться в одном object-oriented отношении.

Лучше всего спросить dotnet себя, какие факты вы хотите dotnet хранить, на какие вопросы database-modeling вы хотите получить ответы, какие oop отчеты вы хотите генерировать.

После mssql создания надлежащего дизайна inheritence БД можно легко создать запросы/представления, которые object-oriented позволят вам сериализовать dotnet ваши объекты в эти отношения.

Пример:

В oop системе бронирования отелей .net-framework вам может понадобиться сохранить inheritance тот факт, что Джейн Доу забронировала inheritance номер в отеле Seaview Inn inheritence на 10-12 апреля. Является object-oriented ли это атрибутом сущности inheritence клиента? Является ли это database-design атрибутом объекта отеля? Является dotnet ли это объектом бронирования dotnet со свойствами, включающими .net-framework клиента и отель? Это может oop быть любой или все эти вещи database-design в объектно-ориентированной .net системе. В базе данных это object-oriented не так. Это просто голый oop факт.

Чтобы увидеть разницу, рассмотрим dotnet следующие два запроса. (1) Сколько ms-sql-server забронировано мест в гостиницах object-oriented Джейн Доу на следующий год? (2) Сколько object-oriented-design номеров забронировано на database-design 10 апреля в отеле Seaview inheritence Inn?

В объектно-ориентированной oop системе запрос (1) является sql-server атрибутом сущности клиента, а object-oriented-design запрос (2) — атрибутом сущности database-modeling отеля. Это объекты, которые database-modeling раскрывают эти свойства в oop своих API. (Хотя очевидно, что inheritence внутренние механизмы получения ms-sql-server этих значений могут включать object-oriented ссылки на другие объекты.)

В sql-server системе реляционной базы oop данных оба запроса будут database-design проверять отношение резервирования, чтобы mssql получить свои числа, и концептуально inheritance нет необходимости беспокоиться mssql о какой-либо другой «сущности».

Таким mssql образом, правильная реляционная .net-framework база данных создается путем mssql хранения фактов о мире, а dotnet не попыток хранения сущностей object-oriented-design с атрибутами. И как только inheritence он будет правильно спроектирован, можно inheritence будет легко сконструировать sql-server полезные запросы, о которых .net-framework и не мечтали на этапе проектирования, поскольку database-modeling все факты, необходимые для ms-sql-server выполнения этих запросов, находятся dotnet на своих местах.

.net

sql-server

oop

inheritance

database-design

2022-10-25T01:44:39+00:00
Вопросы с похожей тематикой, как у вопроса:

Как эффективно моделировать наследование в базе данных?