2013-11-25 4 views
0

Я пытаюсь выяснить, лучший способ реструктурировать свою базу данных, как я не планировал заранее, и теперь я немного застрял на этой части :)Настройка структуры базы данных

У меня есть таблица под названием кампании и таблицу под названием Типы данных.

Каждая кампания представляет собой уникальную запись, содержащую около 10 полей данных.

Типы данных содержит 3 поля - идентификатор, тип Описание

Когда Вы создаете кампанию, вы можете выбрать как можно больше типов данных, как хотелось бы.

1, 2 или все 3 из них.

Моя забота/вопрос: как я могу сохранить то, что пользователь выбрал в записи кампании?

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

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

Что было бы лучшим способом для этого? Хранение данных в формате XML?

ОБНОВЛЕНИЕ -

Вот пример запроса, я пытался заставить работать (его, вероятно, далеко).

 BEGIN 
      SET NOCOUNT ON; 
        BEGIN 
         SELECT * 
       FROM (SELECT A.[campaignID] as campaignID, 
           A.[campaignTitle], 
           A.[campaignDesc], 
           A.[campaignType], 
           A.[campaignStatus], 
           A.[duration], 
           A.[whoCreated], 
           B.[campaignID], 
           B.[dataType], 
           (SELECT * 
            FROM Tags_Campaign_Settings 
            WHERE campaignID = @campaignID) AS dataTypes 
         FROM  Tags_Campaigns AS A 
           INNER JOIN 
           Tags_Campaign_Settings AS B 
           ON A.[campaignID] = B.[campaignID] 
         WHERE A.[campaignID] = @campaignID 
         ) AS a 
       FOR XML PATH ('campaigns'), TYPE, ELEMENTS, ROOT ('root'); 
        END 
     END 

ответ

0

Создайте таблицу объединений Campain_DataType с помощью campaignId и dataTypeId. Убедитесь, что они являются внешними ключами, привязанными к соответствующим таблицам. Когда вы запрашиваете данные кампании, вы можете либо создать отдельный запрос, чтобы получить информацию типа данных на основе campaignId, либо вы можете сделать левое внешнее соединение для извлечения кампаний и их типов данных вместе.

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

SELECT 
    Campaign.ID, 
    Campaign.foo, 
    Campaign.bar, 
    dataType1.hasDataType1, 
    dataType2.hasDataType2, 
    dataType3.hasDataType3 
FROM 
    Campaign 
    LEFT OUTER JOIN 
    (SELECT 
     1 as hasDataType1, 
     Campaign_DataType.campaignID 
    FROM 
     DataType 
     INNER JOIN Campaign_DataType ON Campaign_DataType.dataTypeId = DataType.id 
    WHERE 
     DataType.Type = 'Type1' 
) dataType1 ON dataType1.campaignID = Campaign.ID 
    LEFT OUTER JOIN 
    (SELECT 
     1 as hasDataType2, 
     Campaign_DataType.campaignID 
    FROM 
     DataType 
     INNER JOIN Campaign_DataType ON Campaign_DataType.dataTypeId = DataType.id 
    WHERE 
     DataType.Type = 'Type2' 
) dataType2 ON dataType2.campaignID = Campaign.ID 
    LEFT OUTER JOIN 
    (SELECT 
     1 as hasDataType3, 
     Campaign_DataType.campaignID 
    FROM 
     DataType 
     INNER JOIN Campaign_DataType ON Campaign_DataType.dataTypeId = DataType.id 
    WHERE 
     DataType.Type = 'Type3' 
) dataType3 ON dataType3.campaignID = Campaign.ID 

Пластинка вы получаете для каждой кампании будет иметь три поля: hasDataType1, hasDataType2, hasDataType3. Эти столбцы будут равны 1 для да, NULL - нет.

+0

Во время моего исследования я решил, что это будет что-то вроде этого, но когда я попробовал и присоединился к campaignID, он дал мне дублированный набор данных, с той лишь разницей, что это dataType Я БЫ. Я не был уверен, как просто получить одну запись, если возможно, со всеми связанными с ней идентификаторами. – SBB

+0

Хорошо, у меня есть что-то для вас - в режиме ожидания. –

+0

Хорошо, я отправил пример того, что я пытался сделать, основываясь на том, что вы сказали, но я думаю, что его путь выключен. – SBB

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