Какова цель отношения в наборе данных? - PullRequest
2 голосов
/ 15 августа 2011

Я работаю в SQL CE.В моем дизайне у меня есть:

Стол ученика:

  • StudentID
  • GroupID
  • FirstName
  • LastName

И таблица групп:

  • GroupID
  • GroupName

Я не знаю преимуществ использования Relation из набора инструментов.И появляется мне это окно.Как мне настроить это отношение?Каковы преимущества его использования?

enter image description here

Ответы [ 4 ]

4 голосов
/ 15 августа 2011

Преимущество наличия этого в наборе данных связано со стратегиями проектирования СУБД.Когда вы предоставляете связь первичного / внешнего ключа (если у вас задана относительная целостность), она создает связь между родительской и дочерней таблицами.Это гарантирует, что вы вставляете запись в таблицу, которая имеет допустимый предопределенный внешний ключ из родительской таблицы с первичным ключом.

2 голосов
/ 15 августа 2011

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

У вас есть таблицы марок и моделей со следующими данными:

Make
ID     | MakeName
321    | Ford
322    | Toyota

Model
ID   | ModelName | MakeId
1    | Focus     | 321
2    | Tundra    | 322

Если вы не обеспечите ссылочную целостность, то можно будет удалить строку «Ford» из таблицы Make. Это сделает строку Focus в таблице Model (частично) бессмысленной, поскольку MakeId больше не будет ссылаться на то, что существует.

Если вы навязываете отношения, этого никогда не произойдет.

Некоторые люди с ограниченным опытом работы с базами данных скажут: «Если я просто никогда не удалю эту запись, это даже не будет проблемой». Эта логическая линия имеет ряд проблем, например:

  • У вас выходной и вы ошиблись. Все так делают.
  • Кто-то новый начинает работать с БД, и они не знают об этих подразумеваемых отношениях.
  • Вас уволят, и никто не знает, что эти подразумеваемые отношения даже существуют.

Суть в том, что люди могут совершать ошибки, а компьютеры - нет. Ваша жизнь станет легче, если вы обеспечите ее соблюдение.

1 голос
/ 15 августа 2011

Отношения в строго типизированных наборах данных действительно полезны. Допустим, вы получили объект Group, связанный GroupID с вашим учеником, если вы хотите узнать, входит ли ученик bob в Group 5, по сути, вы можете просто сделать:

if (bob.GroupRow.GroupName == "Group 4")
{ //... }

Кроме того, когда вы создаете нового студента, допустим, вы связываете группу с GroupID:

Classroom cr = new Classroom();
Classroom.StudentRow student = cr.Student.NewStudentRow();
student.FirstName = "Bob";
student.LastName = "Villa";
student.GroupID = 4;

Console.WriteLine(student.Group.GroupName); // Error

DataSet еще не правильно установил ссылку. Вам нужно будет зафиксировать и обновить свой DataSet, чтобы создать ссылку. Однако, если вы идете с этим:

Classroom cr = new Classroom();

Classroom.GroupRow group4 = cr.Group.NewGroupRow();
group4.GroupName = "Group 4";
cr.Group.AddGroupRow(group4);

Classroom.StudentRow student = cr.Student.NewStudentRow();
student.FirstName = "Bob";
student.LastName = "Villa";
student.GroupRow = group4;

Console.WriteLine(student.GroupRow.GroupName); // Works

Я знаю, что не ответил на вопрос «Как настроить это отношение?» часть, но я уверен, что вы уже поняли это. Если не хорошо ... перетащите соответствующие столбцы идентификаторов поверх другого: -P

Редактировать : Это может быть не академический ответ и все такое, но мне нравится видеть, как что-то выглядит, когда я пытаюсь узнать что-то новое.

1 голос
/ 15 августа 2011

При правильной настройке отношение может запретить потерянные записи, где родитель удаляется, оставляя дочерние записи позади.

Можно настроить каскадное удаление или вызвать исключение при попытке удалить родительскую запись с дочерними записями.

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