SQL Server 2008 - запрос проектирования базы данных - PullRequest
0 голосов
/ 20 марта 2012

Мне нужно загрузить данные, показанные на изображении ниже, в мою базу данных.

Для конкретной строки любое из полей PartID будет равно NULL ИЛИ поле GroupID будет NULL, а другие доступные столбцы относятся к объекту NON-NULL.У меня есть три варианта:

  1. Чтобы использовать одну таблицу базы данных, в которой будет один объединенный столбец, скажем ID, в котором будут данные PartID и GroupID.Но в этом случае я не смогу применить ограничение внешнего ключа, так как этот столбец будет содержать данные обеих сущностей.
  2. Чтобы использовать одну таблицу базы данных, в которой будут столбцы для PartID и GroupID,который будет содержать соответствующие данные.Для каждой строки одна из них будет NULL, но в этом случае я смогу применить ограничение внешнего ключа.
  3. Чтобы использовать две таблицы базы данных, которые будут иметь схожую структуру, единственным отличием будет столбецPartID и GroupID.В этом случае я смогу применить ограничение внешнего ключа.

Здесь следует отметить, что таблицы будут использоваться в процессах импорта для импорта около 30000 строк за один раз итакже будет активно использоваться в операциях извлечения данных.Кроме того, другие столбцы будут использоваться в качестве сводных столбцов.

Может кто-нибудь предложить, какой подход должен быть наилучшим для достижения этой цели?

enter image description here

Ответы [ 3 ]

2 голосов
/ 20 марта 2012

Я бы использовал вариант 2 и добавил бы ограничение, что только один может быть ненулевым, а другой должен быть нулевым (просто для безопасности). Я бы не стал использовать вариант 1 из-за отсутствия FK и возможности связывания с неверной таблицей, если не подчиняется идентификатору типа в соединении.

Существует 4-й вариант, который состоит в том, чтобы нормализовать их как «элементы» с другим (суррогатным) ключом и двумя таблицами ссылок, которые связывают элементы либо с частями, либо с группами. Это исключает NULL. Есть и другие проблемы с этим подходом (элементы могут быть в обоих случаях или без каких-либо простых ограничений), поэтому, если это не требуется по другим причинам, я бы не стал идти по этому пути.

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

0 голосов
/ 20 марта 2012

Я бы изменил таблицу так, чтобы в ней был один столбец ID , а затем добавил бы IDType , который либо " G " для Группа или " P " для Part .

0 голосов
/ 20 марта 2012

IMO вариант 2 самый лучший - он не совсем нормализован, но с ним проще всего работать.30K строк не так много строк для импорта.

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