راکت
حل شده

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

5 پاسخ

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

ثبت پرسش جدید

پاسخ‌ها

5
vahid Mohammadi
vahid Mohammadi
@viva.mohammadi
بهترین پاسخ

@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
MHT
@mahiHT

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

vahid Mohammadi
vahid Mohammadi
@viva.mohammadi

@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
MHT
@mahiHT

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

vahid Mohammadi
vahid Mohammadi
@viva.mohammadi

@maedehtoosi

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

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

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