2015-10-01 8 views
0

Я занимаюсь этой проблемой здесь, в компании: у нас есть разные клиенты, которым нужны разные поля в одной таблице, но мы не хотим иметь таблицу с 300 столбцами, которая является inneficient , трудно использовать и так далее. Пример:Таблицы SQL Server распространяются на многие таблицы

table_products имеет следующие поля: product_id, product_name, product_cost.

Тогда первому клиенту «Х» необходимо поле product_registerid. клиенту «Y» требуется поле product_zipareaid.

Это происходит по разным причинам. Пример: они из разных состояний, которые имеют разные правила.

В этот момент мы придумали это решение, которое мне не нравится: product_id, product_name, product_cost, product_personal. В этом product_personal мы сохранили такие значения, как '{product_registerid: 001; product_zipareaid: 001-000131}'.

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

table_products with columns product_id, product_name, product_cost. table_products_x со столбцом product_registerid. table_products_y со столбцом product_zipareaid.

И querys вернется:

1. выберите * из table_products где product_registerid = 001: product_id, product_name, product_cost, product_registerid 1, iphone, 599, 001.

2. выберите * from table_products, где product_zipareaid = 000-000110: product_id, product_name, product_cost, product_zipareaid 1, iphone, 599, 000-000110.

Итак, я принимаю различные предложения для решения нашей проблемы. Спасибо заранее!

ответ

1

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

Product_id (FK) 
Client_id 
PropertyName 
PropertyValue 

И так будет заполняться значениями, как:

Product_id Client_id PropertyName   PropertyValue 
1   x   product_registerid 001 
1   y   product_zipareaid 000-000110 

Тогда вы просто присоединиться table_products для Extended_properties на Product_Id и поместите требуемые Client_id (ы) в предложение WHERE.

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

+0

В случае, если я хочу, чтобы свойство имело разные типы, такие как blob, int, varchar. Что вы предлагаете? Кроме того, я хотел бы, чтобы доставка была простой в использовании для моих разработчиков .net, которые используют моделирование на основе linq, поэтому они могут делать что-то вроде db.table_products.product_zipareaid = 000-000102. Спасибо. –

+0

Для чего угодно, кроме blobs, вы можете просто использовать varchar или nvarchar, которые могут быть отнесены к числовым во время запроса. Если вам действительно нужны свойства blob, вы должны сохранить их в своей таблице, аналогичной этой, но PropertyValue будет иметь тип blob.Я не специалист по linq, поэтому я не знаю, какие ограничения у него есть. –

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

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