MHT
6 سال پیش توسط MHT مطرح شد
5 پاسخ

کلید های ترکیبی در پایگاه داده

سلام و وقت بخیر.
اینکه کلید یک تیبل ترکیبی از چند کلید باشه یعنی چی ؟
مثلا اگر بخوام کلیدم ترکیبی از نام و قیمت محصولی باشه باید به این صورت تعریف کنم؟
protected $primaryKey = array('key1', 'key2');


ثبت پرسش جدید
vahid Mohammadi
@viva.mohammadi 6 سال پیش مطرح شد
0

@maedehtoosi
سلام اگر از لاراول استفاده می کنید به شکل زیر scheme رو تعریف کنید

Schema::create('doc_tag', function(Blueprint $table)
{
    $table->integer('id_doc')->unsigned();
    $table->integer('id_tag')->unsigned();

    $table->primary(['id_tag', 'id_doc']);

    $table->foreign('id_doc')
                ->references('id')
                ->on('doc');    
    $table->foreign('id_tag')
                ->references('id')
                ->on('tag');
});

MHT
@mahiHT 6 سال پیش مطرح شد
0

@viva.mohammadi
خیلی ممنونم.اگر تعداد کلیدها بیشتر باشن (مثلا 3 تا ) چطور میشه؟
این قسمت ->on('doc'); و ->on('tag'); یعنی چی؟
مثلا یه چیزی مثل قیمت رو باید جای id-doc بنویسم و این تیکه ی ->on('tag'); رو باید جاش چی بذارم؟


vahid Mohammadi
@viva.mohammadi 6 سال پیش آپدیت شد
0

@maedehtoosi
خواهش میکنم
بیبنید تیکه کد زیر برای تعریف کلید هاتون هست که من الان ۳ تا کلید همزمان  به عنوان کلید اصلی تعریف کردم

$table->integer('id_doc')->unsigned();
    $table->integer('id_tag')->unsigned();
    $table->integer('id_user')->unsigned();

    $table->primary(['id_tag', 'id_doc ,'id_user']);

معمولا کلیدها برای استفاده از روابط بین جداول استفاده می شوند که در کد زیر نوع روابط با جداول دیگه رو مثال زدیم اگه رابطه با جدول های دیگه نداره لازم نیست اون رو بنویسید

 $table->foreign('id_doc')
                ->references('id')
                ->on('doc');    
    $table->foreign('id_tag')
                ->references('id')
                ->on('tag');

نکته : استفاده از فیلد قیمت به عنوان کلید اصلی کار عاقلانه ایی به نظر نمی رسه


MHT
@mahiHT 6 سال پیش مطرح شد
0

@viva.mohammadi
خیلی لطف کردید واقعا، ممنونم.


vahid Mohammadi
@viva.mohammadi 6 سال پیش مطرح شد
1

@maedehtoosi

خواهش می کنم اگر مشکلتون حل شد به عنوان بهترین پاسخ انتخاب کنید تا بقیه که این مشکل رو دارن بفهمن که جواب گرفتین. ممنون


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام