Как разработать таблицы сущностей для сущностей с несколькими именами - PullRequest
0 голосов
/ 02 мая 2019

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

Первоначальный анализ таблиц выглядит следующим образом:

CREATE TABLE dbo.Customer (
CustomerId INT IDENTITY(1,1) NOT NULL --PK
 -- other fields below )


CREATE TABLE dbo.CustomerName (
CustomerNameId INT IDENTITY(1,1) NOT NULL -- PK
,CustomerId INT -- FK to Customer
,CustomerName VARCHAR(30)
,IsPrimaryName BIT)    

Хотя имя клиента является частью сущности «Клиент», и я считаю, что оно принадлежит таблице «Клиент». Есть ли лучший дизайн для этой ситуации?

Спасибо

Ответы [ 2 ]

1 голос
/ 02 мая 2019

Лично я бы оставил Основное имя в таблице Customer и создал бы таблицу «AlternateNames» с отношением ноль-ко-многим к Customer.

Это связано с тем, что, по-видимому, большую часть времени при возврате данных о клиентах вы будете заинтересованы только в возврате основного имени.И, вероятно, основная (если не единственная) причина, по которой вы хотите использовать альтернативные имена, заключается в поиске клиентов при предоставлении альтернативного имени.

0 голосов
/ 02 мая 2019

К сожалению, это слишком долго для комментария.

Прежде чем понять это, требуется больше информации.

  1. Нужна ли дополнительная информация для имен? Например, язык, название или дата создания?
  2. Уникальны ли имена? Уникальность внутри клиента или над всеми именами?
  3. Являются ли первичные имена уникальными?
  4. У каждого клиента должно быть основное имя?
  5. Как часто основное имя меняется на альтернативное имя? (В отличие от простого обновления имени.)
  6. Когда вы запрашиваете данные, вы узнаете, является ли имя основным или альтернативным именем? (Или их все нужно сравнивать?)

В зависимости от ответа на этот вопрос соответствующая структура данных может иметь некоторые хитрые нюансы. Например, если у вас есть флаг для определения основного имени, может быть сложно убедиться, что это значение задано ровно в одной строке, особенно при обновлении строк.

Примечание. Если вы обновите вопрос ответами, я его удалю.

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