Knex: Knex.Schema : ๋ณตํ•ฉ ๊ณ ์œ  ํ‚ค๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์— ๋งŒ๋“  2013๋…„ 08์›” 12์ผ  ยท  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 API๊ฐ€ ์–ผ๋งˆ ์ „์— ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ์— ๋”ฐ๋ผ 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, ๋„คํŠธ์›Œํฌ 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
VS ์˜๋ฏธ : 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

Protip : github์—์„œ ํƒ์ƒ‰ํ•˜๋Š” ๋™์•ˆ "y"ํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด ํ˜„์žฌ๋ณด๊ณ ์žˆ๋Š” ํŒŒ์ผ์˜ ํ˜„์žฌ sha url๋กœ ์ „ํ™˜๋ฉ๋‹ˆ๋‹ค. ๋งค์šฐ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋Œ“๊ธ€์— gh url์„ ๋ถ™์—ฌ ๋„ฃ์„ ๋•Œ github๊ฐ€ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์€ ๋ฌธ์„œ์— ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

@RichardSimko ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ์— ๋”ฐ๋ฅด๋ฉด ๋ณตํ•ฉ ํ‚ค์— ๋Œ€ํ•œ table.unique([...]) ๊ตฌ๋ฌธ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์ง€์›๋˜๋ฏ€๋กœ ๋ฌธ์„œ์˜ ๋ฒ„๊ทธ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜, ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์—ฌ์ „ํžˆ ์ž‘๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜๊ณ , ๋ฌธ์„œ์— ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ œ๊ฑฐ ๋  ๊ฒƒ์ด๋ผ๊ณ  ๊ฑฑ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด table.unique([...]) ์™€ table.primary([...]) ์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด primary([...]) ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ณตํ•ฉ ๊ธฐ๋ณธ ํ‚ค๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์ ์ ˆํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๋‹จ์ผ ์—ด์—์„œ ํ˜ธ์ถœ๋˜๋ฉด ํ•ด๋‹น ์—ด์„ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ํ‚ค๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ณตํ•ฉ ๊ธฐ๋ณธ ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด ์—ด ์ด๋ฆ„ ๋ฐฐ์—ด์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค : table.primary(['column1', 'column2']) . ์— ์ œ์•ฝ ์ด๋ฆ„์˜ ๊ธฐ๋ณธ๊ฐ’์€ tablename_pkey ํ•˜์ง€ ์•Š๋Š” ํ•œ constraintName ์ง€์ •๋ฉ๋‹ˆ๋‹ค.

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

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰