Базы данных SQL, модели данных сущностей и сущности 1 на 1

Я новичок в EDM, в прошлом я написал довольно много материала для ADO.Net. У меня есть три таблицы:

**Product:**
Prod_ID - PK

**Product_MaxLoan**
Prod_ID - PK

**Product_MinLoan**
Prod_ID - PK

Эти таблицы, размещенные в MS SQL 2005, еще не имеют настроенных FK или ограничений, они должны иметь условное отношение 1 к 1. Например, в каждой строке продукта с идентификатором 1 будет строка в Product_MaxLoan и Product_MinLoan с идентификатором 1.

В Visual Studio 2010 я хочу правильно настроить EDM, чтобы кардинальность была установлена ​​​​от 1 до 1. Ранее у меня были ограничения FK для таблиц и следующие настройки, однако это позволило бы только кардинальность 0..1 (я полагаю, чтобы учесть тот факт, что Продукт может не иметь Product_MaxLoan или Product_MinLoan).

**Product:**
Prod_ID - PK

**Product_MaxLoan**
ID - PK
Prod_ID - FK

**Product_MinLoan**
ID - PK
Prod_ID - FK

Вопросы:

  • Какой совет вы бы дали по настройке этих таблиц в SQL 2005? Для отношений 1 к 1 в EDM вы бы установили FK?
  • Можете ли вы настроить отношение PK в SQL 2005, которое EDM будет читать при импорте из базы данных?
  • Продукт содержит около 300 свойств, поэтому размещение всех этих данных в одной таблице было бы плохой нормализацией базы данных (отсюда и множество таблиц 1-1). Было бы лучше поместить все эти свойства в один класс EDM? Моя внутренняя реакция состоит в том, чтобы разбить его так, как он структурирован в БД (это мое наследие ADO выходит на первый план), имея класс для каждой логической части продукта.

Ваш совет будет оценен.

С наилучшими пожеланиями,

Отметка


person MagicalArmchair    schedule 17.01.2012    source источник


Ответы (1)


В базе данных используйте эту конфигурацию:

**Product:**
Prod_ID - PK

**Product_MaxLoan**
Prod_ID - PK, FK (to Product)

**Product_MinLoan**
Prod_ID - PK, FK (to Product)

Это заставит отношение один к одному на уровне базы данных, а также в EF. Само отношение будет 1 - 0..1 (Product может существовать без MaxLoan и MinLoan), потому что реальное 1:1 не может существовать в базе данных. Real 1 : 1 требует, чтобы обе сущности всегда существовали = вы не можете вставить первую, если вторая не существует, и вы не можете вставить вторую, если первая не существует. Как их вставить, не отключая ссылочную целостность?

person Ladislav Mrnka    schedule 18.01.2012
comment
Здравствуйте, Ладислав. Спасибо за этот совет, это имеет смысл. С точки зрения EDM, не могли бы вы предложить мне иметь все 300 свойств в одном классе? Или разбить его на более мелкие классы? Спасибо еще раз. Отметка - person MagicalArmchair; 18.01.2012