0

Я создаю веб-сайт asp.net (через Expression Web 4 и Visual Web Developer 2010 Express), используя базу данных, созданную через Sql Server 2008. Тем не менее, я придерживаюсь схемы базы данных, которая загружается на веб-сайт.Схема базы данных для сайта назначения - Это взаимосвязь «многие ко многим»?

Созданный веб-сайт позволяет создавать судебные дела с указанием типа дела, а затем иметь адвоката (юристов) и/или адвокатов и/или сотрудников службы поддержки, зарегистрированных как работающих по делу.

Таким образом, случай под названием «Крамер против Крамера» будет случаем развода с 2 адвокатами, 1 адвокатом и 4 вспомогательными сотрудниками, которые работают над этим делом. Однако в другом случае «Люди против Ларри Флинта» могут быть обвинения с участием 4 адвокатов, адвокатов и 10 вспомогательных сотрудников.

То, что я сделал до сих пор является то, что у меня есть таблица под названием «Case Таблица», который содержит следующие столбцы:

Case_ID (это является первичным ключом для таблицы); Case_Type_ID; Lawyer_ID; Advocate_ID и Support_Staff_ID. Последние 4 столбца в таблице примеров - это внешние ключи.

Case_Type Таблица просто имеет две колонки: «Case_Type_ID» (PK) и «Area_of_law». Case_Type_ID - это просто цифры (001,002 ...), а «Area_of_law» - char (30) (например, судебный процесс, развод, собственность, преступник). Все идет нормально.

Проблема заключается в том (и это относится к адвокатам и персоналу поддержки), если я создаю юриста таблицу просто есть три колонок:

Columns = Lawyer_ID (как первичный ключ) | Имя: Фамилия

запись 1 = 001 | Том | Hanks

запись 2 = 002 | Том | Круизный

запись 3 = 003 | Даниил | Craig

запись 4 = 004 | Николь | Kidman

Как я могу назначить нескольких юристов на случай?

В Case таблице, в целях соблюдения правил нормализации, по-видимому, я должен был бы добавить столбцы в Case таблицы, как описано выше, так что он записывает Lawyer_ID_1 (FK) | Lawyer_ID_2 (FK) | Lawyer_ID_3 (FK) | Lawyer_ID_4 (FK).

Это может быть 004 | 002 | Null | Нуль, чтобы показать Николь Кидман и Том Круз, работали над этим делом. Если бы у меня был только один столбец Lawyer_ID, чтобы показать, что Николь Кидман и Том Круз работают над этим делом, это должно быть «004,002», что является большим, не-нет, из того, что я прочитал на этом веб-сайте.

Регистрируя всех адвокатов в отдельной таблице, я могу создать DataBound CheckBoxList (привязанный к Lawyer таблице) в Visual Web Developer 2010 Express, потому что он заполнит список с именами адвокатов. Поэтому я доволен этим подходом.

Но если тогда было 50 юристов в Lawyer таблице, я должен был бы иметь 50 столбцов в таблице Case назначен только адвокаты (если дело в конечном итоге с 50 юристов, работающих на нем). Этот подход является проблематичным, так как таблица Case может быть искажена, если юристы будут удалены или добавлены, потому что количество столбцов Lawyer будет затронуто. Ясно, что это плохой подход, и кто может помочь?

Есть ли схема базы данных, которая позволила бы одной записи «Case» быть связана с несколькими записями «Lawyer» без многочисленных столбцов? (мы надеемся, что схема также может быть применена к таблице вспомогательного персонала и Таблица адвокатов).

Ваша помощь будет очень признательна. Я новичок в веб-разработке и работе с базами данных sql, и я попытался найти решение, но я, вероятно, не знаю ключевых слов для своей проблемы.

ответ

0

Это, вероятно, отношения «многие ко многим». Позвольте мне объяснить эти 3 отношения немного в вашем случае:

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

Если у каждого случая есть только один адвокат, но каждый адвокат может работать по нескольким делам, тогда у вас есть отношения «один ко многим». Точно так же, если каждый случай может иметь несколько юристов, но каждый адвокат может работать только по одному делу, тогда у вас все еще есть отношения от одного до многих.

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

Типичное решение многие ко многим отношений, чтобы иметь третью таблицу для описания отношений:

create table casesALawyerWorksOn (case_id, lawyer_id) 

Если @albert, @ Брэд и @christine работа на случай @peopleVflynt, то:

insert into casesALawyerWorksOn (case_id, lawyer_id) values 
    (@albert, @peopleVflynt) 
    (@brad, @peopleVflynt) 
    (@christine, @peopleVflynt) 

Таким образом, все дела, что адвокат @fred работы по являются:

select case_id from casesALawyerWorksOn where lawyer_id = @fred 

в d все юристы, которые работают по делу @kramerVkramer:

select lawyer_id from casesALawyerWorksOn where case_id = @kramerVkramer 
+0

Большое спасибо за ваш быстрый ответ. Если бы я хотел добавить дополнительную информацию, например. независимо от того, работает ли юрист полный или неполный рабочий день, создаю ли я отдельную таблицу с двумя отчетами, таблицу с двумя столбцами? например первый столбец является первичным ключом, а второй столбец предназначен для полного и неполного времени. Добавляю ли я этот столбец к вашим предложенным случаямALawyerWorksOn? 'create table casesALawyerWorksOn (case_id, lawyer_id, workpattern_id)'? –

+0

@ Tony124-147 Полный/неполный рабочий день является атрибутом отношений, не так ли? Таким образом, вы можете добавить столбец в таблицу отношений. Для этого вам не нужно создавать новую таблицу. –

 Смежные вопросы

  • Нет связанных вопросов^_^