Ввод переменного количества данных в базу данных с наилучшей возможной нормализацией

0

ok, поэтому у меня есть база данных, состоящая из двух таблиц, продуктов и поставщиков.

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

Проблема, с которой я сейчас сижу, заключается в том, как я могу вставить все различные продукты, которые поставщик выбирает в таблицу поставщиков, или я должен просто рассказать обо всех продуктах, которые он выбирает для одного поставщика, для лучшей нормализации, поскольку все продукты уже есть?

Я буду использовать jQuery $.ajax для отправки данных формы в формате JSON в ожидающий файл PHP, который затем проанализирует его и вставляет данные в базу данных.

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

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

Код jQuery, который я использую для заполнения клонов и POST продуктов, которые выбирает поставщик:

$(document).ready(function() {

        var count = 0;      

        //when clicked it will remove the closest div with a class of 'container'
        $("span.remove").live('click', function(){
            $(this).closest("div.container").fadeOut(400, function(){
                $(this).remove();
                $('#button').attr('disabled','');
            });
        });

        //initialize the button
        $('#button').attr('disabled','');
        $('#button').click(function(){

            var count = $("#systems_wrapper > .container").size();
            var lastID = $("#systems_wrapper > .container:last").attr('id');
            var exploded = lastID.split("_");
            var increment = Number(exploded[1])+1;

            //if the user has selected 5 products, disable the 'add' button
            if(count >= 5){
                $('#button').attr('disabled','disabled');
            }else {
                $('#button').attr('disabled','');
            }

            //clone the first drop down and give it a different ID, as well as it child elements
            var test = $('#systems_0.container').clone().attr('id', 'system_' + increment).appendTo('#systems_wrapper');
            test.children(':nth-child(2)').append('<span class="remove"></span>');
            test.children(':nth-child(2)').children(':first').attr('id', 'mail_' + increment).attr('class','dropDowns').attr('onchange','test();');


            });


    //get the products JSON object returned from test_post.php and run the necessary functions on the returned data
    $.getJSON("test_post.php", function(data){

    //clean out the select list
    $('#box').html('');

        //run the loop to populate the drop down list
        $.each(data, function(i, products) {
            $('#box').append(
                $('<option></option>').html(products.products)
            );
        });
    });
});


//this gets all of the products chosen and then gets each ones value and ID, and then posts it to the qwer.php file

function test(){
    var sections = $('#systems_wrapper').find('.dropDowns');
    var newArray = new Array();

    sections.each(function(){
        var id = $(this).attr('id');
        var val = $(this).val();
        var o = { 'id': id, 'value': val };

        newArray.push(o);
    });

    alert(newArray);

    $.ajax({
            type: "POST",
            url: "qwer.php",
            dataType: 'json',
            data: { json: JSON.stringify(newArray) }
        });

}

Thanx заранее!

  • 0
    Вы знаете, то, как вы собираете и представляете данные на стороне клиента, не имеет прямого отношения к вашему вопросу, касающемуся проектирования базы данных.
  • 0
    Что ж, отчасти вопрос заключается в том, чтобы получать переменное количество продуктов в базу данных после ее отправки, поэтому мне показалось правильным показать, как я собирал и отправлял его в файл PHP. Я вижу, как это может быть немного чрезмерно, но скорее слишком много, чем слишком мало.
Теги:
many-to-many

1 ответ

2
Лучший ответ

Если я правильно понимаю проблему с уровня базы данных, следует ли использовать промежуточную таблицу, называемую ProductSupplier, содержащую столбец Product_ID и Supplier_ID.

Затем, когда поставщик выбирает продукт, добавьте идентификатор поставщика и продукта в новый столбец в этой таблице.

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

EDIT: я хотел сказать: "Добавить идентификатор поставщика и продукта в новый ROW в этой таблице"

  • 0
    ... и это называется "отношения многих ко многим".
  • 0
    Есть идеи о том, как ввести каждый из продуктов в эту таблицу? Могу ли я использовать что-то вроде цикла foreach?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню