Knex: Knex.Schema: كيفية إنشاء مفتاح فريد مركب؟

تم إنشاؤها على ١٢ أغسطس ٢٠١٣  ·  12تعليقات  ·  مصدر: knex/knex

فمثلا،

ALTER TABLE users ADD UNIQUE KEY(LoginID, Email);
ALTER TABLE users ADD UNIQUE KEY(Email);
ALTER TABLE users ADD UNIQUE KEY(LoginID);

كيف أفعل ذلك باستخدام Knex.Schema.createTable

question

التعليق الأكثر فائدة

أعتقد أنه يجب أن تكون قادرًا على القيام بذلك من خلال:

Knex.Schema.createTable('tableName', function(table) {
  table.unique(['LoginID', 'Email']);
  table.unique('LoginID');
  table.unique('Email');
});

اسمحوا لي أن أعرف إذا كان يبدو أنه لا يعمل.

ال 12 كومينتر

أعتقد أنه يجب أن تكون قادرًا على القيام بذلك من خلال:

Knex.Schema.createTable('tableName', function(table) {
  table.unique(['LoginID', 'Email']);
  table.unique('LoginID');
  table.unique('Email');
});

اسمحوا لي أن أعرف إذا كان يبدو أنه لا يعمل.

يعمل شكرا! التحضير للتبديل من Sequelize.

أحاول تشغيل الهجرة

knex.schema.createTable('users', function (table) {
        table.increments('id').primary();
        table.string('network', 3).notNullable();
        table.string('uid', 64).notNullable();
        table.unique(['network', 'uid']);
        table.timestamps();
}).then(function () {
        console.log('Users Table is Created!');
});

لكني لن أحصل على فهرس فريد

CREATE TABLE `users` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `network` varchar(3) NOT NULL,
  `uid` varchar(64) NOT NULL,
  `created_at` datetime DEFAULT NULL,
  `updated_at` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

ما يمكن ان يكون خطأ؟

@ theo-ptz تغيرت واجهة برمجة التطبيقات منذ فترة. وفقًا للمستندات ، أصبح unique الآن طريقة قابلة للتسلسل يمكنك استخدامها بنفس الطريقة التي تستخدم بها primary و notNullable .

bendrucker ، شكرا.

لكن شيئًا ما لا يعمل.
أحاول تشغيل هذا الرمز

knex.schema.createTable('users', function (table) {
    table.increments('id').primary();
    table.string('network', 3).notNullable();
    table.string('uid', 64).unique();
    table.timestamps();
})

لقد رأيت هذا في التصحيح
مستخدمون --> ComQueryPacket { command: 3, sql: 'create table ( id int(11) unsigned not null auto_increment primary key, network varchar(3) not null, uid varchar(64), created_at datetime, updated_at datetime) default character set utf8' }

لم أحصل على فهرس.

 CREATE TABLE `users` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `network` varchar(3) NOT NULL,
  `uid` varchar(64) DEFAULT NULL,
  `created_at` datetime DEFAULT NULL,
  `updated_at` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

ما يمكن ان يكون خطأ؟

هل هناك طريقة لإنشاء فهرس فريد مركب في الترحيل؟

راجع اختبارات التكامل للحصول على مثال لقيد فريد مركب:

https://github.com/tgriesser/knex/blob/master/test/integration/schema/index.js#L92

bendrucker عند الارتباط بملف مصدر ، يرجى استخدام علامة / الالتزام بدلاً من الرئيسي:
الرابط الذي لم يعد يعمل: https://github.com/tgriesser/knex/blob/master/test/integration/schema/index.js#L92
مقابل ما قصدته: https://github.com/tgriesser/knex/blob/0.5.11/test/integration/schema/index.js#L92
وباستخدام أحدث إصدار (0.8.6): https://github.com/tgriesser/knex/blob/0.8.6/test/integration/schema/index.js#L157

نصيحة: إذا ضغطت على مفتاح "y" أثناء التصفح على github ، فإنه يتحول إلى عنوان url الحالي للملف الحالي الذي تشاهده. مريح للغاية ، أتمنى أن يقوم جيثب بذلك تلقائيًا عند لصق عنوان url في أحد التعليقات

هل تم إهمال هذه الميزة لأنها ليست في الوثائق؟

RichardSimko وفقًا لمجموعة الاختبار ، لا يزال بناء الجملة table.unique([...]) للمفاتيح المركبة مدعومًا ، لذلك يبدو أنه خطأ في الوثائق.

نعم ، لقد أدركت أنه لا يزال يعمل ، كنت قلقًا فقط من أنه على وشك الإزالة نظرًا لعدم وجوده في المستندات.

إذن ما الفرق بين table.unique([...]) و table.primary([...]) ؟

وفقًا للمستندات ، يبدو أن استخدام primary([...]) هو الطريقة الصحيحة لعمل المفاتيح الأساسية المركبة:

عندما يتم استدعاؤه في عمود واحد ، سيتم تعيين هذا العمود كمفتاح أساسي للجدول. لإنشاء مفتاح أساسي مركب ، مرّر مصفوفة من أسماء الأعمدة: table.primary(['column1', 'column2']) . اسم القيد الافتراضي هو tablename_pkey ما لم يتم تحديد constraintName .

http://knexjs.org/#Schema -Primary

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

mattgrande picture mattgrande  ·  3تعليقات

nklhrstv picture nklhrstv  ·  3تعليقات

arconus picture arconus  ·  3تعليقات

aj0strow picture aj0strow  ·  3تعليقات

fsebbah picture fsebbah  ·  3تعليقات