Разделить «идентичность» между таблицами - PullRequest
0 голосов
/ 31 августа 2009

Я работаю над базой данных, в которой есть существующая таблица индивидуалов, из которой происходит каждый тип пользователя. Другими словами, есть таблицы вроде:
Individual: FirstName, LastName, Email, <code><lots more>
Сотрудник: IndividualId
Заказчик: IndividualId
и т.д.

Теперь я хочу добавить новый тип пользователя (WeirdPerson), который не является производным от Individual. (У WeirdPerson значительно меньше данных, связанных с ним, чем у любого персонажа, и я действительно не хочу устанавливать практически каждое поле в Individual как ноль для WeirdPerson.)

Мне нужно ключевое поле для использования в таблице, в которой будут записи от WeirdPersons и записи от физических лиц. Это предполагает таблицы таблиц примерно так:
MashedupIndividuals: MashedupId, IndividualId<br /> MashedupWeirdPerson: MashedupId, WeirdPersonId

Я хочу, чтобы MashedupId был автоматически сгенерированным полем. Поскольку я использую TSQL, идентификация кажется хорошим выбором. За исключением того, что MashedupId разделен на две таблицы. Я рассмотрел еще одну таблицу:
MashedupIds: MashedupId
Установите MashedupId как идентификатор, а затем сделайте его внешним ключом в MashedupIndividuals и MashedupWeirdPerson.

Это лучший способ двигаться вперед? Как бы вы решили это?

РЕДАКТИРОВАТЬ: Чтобы уточнить, единственная информация, которую я имею для WeirdPerson, это адрес электронной почты. Я подумал об удалении поля электронной почты из Individual, а затем о создании новой таблицы GlobalPerson только с GlobalPersonId и Email. Таблица GlobalPerson (или какое-либо другое лучшее имя, которое я использую) не так естественна, как разделение WeirdPerson, как совершенно другой тип. Однако ... Я готов пересмотреть эту позицию.

Ответы [ 3 ]

2 голосов
/ 31 августа 2009

Я бы предложил таблицу для размещения данных, общих для всех людей в вашем приложении.Затем вы можете иметь дополнительные таблицы для определенных типов людей и связать их с вашей общей таблицей.

tblPerson

  • PersonID (pk)
  • имя, адрес,день рождения и т. д.

tblEmployee

  • EmployeeID (pk)
  • PersonID (fk to tblPerson)
  • Должность, OfficePhone, Emailи т. д.

tblCustomer

  • CustomerID (pk)
  • PersonID (от fk до tblPerson)
  • Другие поля ...

РЕДАКТИРОВАТЬ:

Вот некоторые определения, более подходящие для вашего вопроса (а также более забавные с этими странными людьми).Ключом является установление данных, которыми странные люди и обычные люди делятся, а затем установление таблиц / отношений для поддержки этой модели.Может потребоваться переместить поля, неприменимые к странным людям, из tblIndividual в tblNormalPerson.

tblIndividual

  • IndividualID (pk)
  • Другие поля для применимых данныхкак странным, так и нормальным людям

tblWeirdPerson

  • WeirdPersonID (pk)
  • IndividualID (от fk до tblIndividual)
  • NumberOfHeads (применимостранным людям)

tblNormalPerson

  • NormalPersonID (pk)
  • IndividualID (от fk до tblIndividual)
  • FirstName (применяются другие поля)нормальным людям)
  • Фамилия
  • И т.д ...
1 голос
/ 31 августа 2009

Вы можете использовать поле uniqueidentifier для своего идентификатора. Это гарантированно будет уникальным для нескольких таблиц. Используйте функцию NEWID() для генерации новых значений.

0 голосов
/ 31 августа 2009

Вы можете иметь таблицу с тремя полями, одно из которых всегда равно нулю:

MashedupId, IndividualId, WeirdPersonId

или с полем идентификатора и типом идентификатора (индивидуальный / странный)

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