AWS RDS์์ MariaDB ์ฌ๋ ์ด๋ธ๋ฅผ ๊ตฌ์ถํ ๊ฒฝ์ฐ 10.1 ๋ฒ์ ๊ถ์ฅ*
- ํ ์ด๋ธ๋ช ์ ์๋ฌธ์ snake_case ๋ก ์์ฑ
- ํ ์ด๋ธ๋ช ์ ๋จ์(singular)ํ์ ์ฌ์ฉ
- Storage Engine
- InnoDB(Compact) ์ฌ์ฉ
- MyISAM ์ฌ์ฉ ๊ธ์ง (ํธ๋์ญ์ ์ด ์๋๋ผ๋ InnoDB๊ฐ ์ ๋ฆฌํจ)
- TokuDB ์ฌ์ฉ์ ๋ก๊ทธ์ฑ ํ ์ด๋ธ์๋ง ํ์
- Charset:
utf8mb4
- Collation:
utf8mb4_unicode_ci
- ํ ์ด๋ธ ์ฝ๋ฉํธ๋ ๋ฐ๋์ ์์ฑ
- sp_๋ก ์์ํ๋ฉฐ ์๋ฌธ์ snake_case ์ฌ์ฉ
- v_๋ก ์์ํ๋ฉฐ ์๋ฌธ์ snake_case ์ฌ์ฉ
- ์๋ฌธ์ snake_case ๋ฅผ ์ฌ์ฉ
- ๋ณ๊ฒฝ๋ด์ญ ์ถ์ ์ ์ํ ์ปฌ๋ผ์ ํ์
์
DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
์ฌ์ฉ
-
Primary Key๋ ํญ์ ๋ช ์์ ์ผ๋ก ์ ์
- ์ปฌ๋ผ๋ช
์ id
- ์ผ๋ถ ์ค๋๋ ํ ์ด๋ธ์๋ idx, pk_id๋ผ๋ ์ปฌ๋ผ๋ช ์ ์ฌ์ฉํ๊ณ ์๋๋ฐ, ์ด๋ ๊ท์น์ ์ด๊ธ๋จ
INT(10) UNSIGNED
ํน์BIGINT(20) UNSIGNED
์ ์ฌ์ฉ- ๋ฐ๋์ primary key, auto increment ์์ฑ์ ์ง์
- ์ปฌ๋ผ๋ช
์ id
-
Index์ ์ฌ์ฉ
- index๋ช ์ idx_๋ก ์์ (์ ํ์ฌํญ)
- ์ปค๋ฒ๋ง ์ธ๋ฑ์ค์ ๊ฒฝ์ฐ c_idx_๋ก ์์ (์ ํ์ฌํญ)
- ์ญ์ ์ ๋ ฌ์ด ํ์ํ ๊ฒฝ์ฐ ๋ช
์์ ์ผ๋ก rev_์ปฌ๋ผ์ ์ถ๊ฐํ๊ณ ์ธ๋ฑ์ค์ ํฌํจ
- ํ์ํธํ์ ์ํด ์ปฌ๋ผ์
PERSISTENT
์์ฑ์ ์ง์ ํ์ง ์์
- ํ์ํธํ์ ์ํด ์ปฌ๋ผ์
-
Foreign Key์ ์ฌ์ฉ
- index๋ช ์ fk_๋ก ์์ (์ ํ์ฌํญ)
- ๊ฐ๊ธ์ FK(Foreign Key)์กฐ๊ฑด์ ํ์ฉํ์ฌ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ ๊ฒ
- ๋จ, ์ฌ์ฉ์ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ ์ค๋ฉ์ ์ํด FK๋ฅผ ๊ฑธ์ง ์์
- rows ์์ ์ํ์ ์์ธกํ๊ธฐ ์ด๋ ต๊ฑฐ๋ ๋งค์ฐ ๋ง์์ง ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ฉด FK๋ฅผ ๊ฑธ์ง ์์
-
Boolean ์ปฌ๋ผ์
TINYINT(1)
์ ์ฌ์ฉํ๋ฉฐ, โis_โ ์ ๋์ด๋ฅผ ๋ถ์. ('Y/N' ์ ์ฌ์ฉํ์ง ์์)- Collation์ด case-sensitive์ธ ๊ฒฝ์ฐ์ ์ฝ๋์ ์ค์๋ฅผ ๋ฐฉ์งํ ์ ์์
- enum์ ์ ์ํ์ง ์์๋ ๋๋ฉฐ, ํ๋๊ทธ๋ก ๋ณ๊ฒฝ์ด ์ฉ์ด
-
IPv4๋ฅผ ์ ์ฅํ ๋์๋
UNSIGNED INT
ํ์ ์ ์ด์ฉVARCHAR(16)
์ ๋นํด 1/4์ ์ ์ฅ๊ณต๊ฐ๋ง ์ฌ์ฉ
-
์ ํจ๊ธฐ๊ฐ ๋ฑ์ ํํํ ๋ ์ด ๊ฐ์ด optional ํ ๊ฒฝ์ฐ ์ ํจ๊ธฐ๊ฐ์ด ์์์ null๋ก ํํ
-
์๊ฐ๋๋
Asia/Seoul
๋ง ์ฌ์ฉ- ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ KST(+0900)๋ก ๋ณด๊ดํ๊ณ , ์๋กญ๊ฒ ์์ฑํ๊ฒ ๋๋ ์ปฌ๋ผ์๋ UTC๋ ์ฌ์ฉํ์ง ์๋๋ค.
- ์ด๋ UTC์ KST๋ฅผ ํผ์ฉํ ๋ ๋ฐ์ํ๋ ์ค์๋ฅผ ์ต์ํํ๊ธฐ ์ํ ๊ฒฐ์ ์ด๋ค.
-
TIMESTAMP
ํ์ ์ ์ฌ์ฉํ์ง ์๋๋ค.- ๊ธฐ์กด ๋ฐ์ดํฐ๋ 2038๋ ์ด ๋๋ํ๊ธฐ ์ ๊น์ง ๋ณํ์ ์๋ฃํ ๊ฒ
-
๋ถ์ ํํ ๋ ์ง๋ฅผ ํ๊ธฐํด์ผ ํ ๋๋,
DATE
ํ์ ์ ์ฌ์ฉ-
์ฐธ๊ณ : http://dev.mysql.com/doc/refman/5.5/en/date-and-time-types.html
MySQL permits you to store dates where the day or month and day are zero in a DATE or DATETIME column. This is useful for applications that need to store birthdates for which you may not know the exact date. In this case, you simply store the date as '2009-00-00' or '2009-01-00'. If you store dates such as these, you should not expect to get correct results for functions such as DATE_SUB() or DATE_ADD() that require complete dates. To disallow zero month or day parts in dates, enable the NO_ZERO_IN_DATE SQL mode.
-
VARCHAR(6)
์ ์ฌ์ฉํ ๊ฒฝ์ฐ 4byte(utf8mb4) * 6 + 1byte(length) = 25byte ๊ฐ ์ฌ์ฉ๋๋,DATE
๋ 4byte๋ง ์ฌ์ฉ. -
zero date๋ ์ฌ์ฉํ์ง ์์(from '2015-01-00' to '2015-01-01')
- ๋ ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง๋ค zero date ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ด ๋ฌ๋ผ์ ์ค๋ฅ๊ฐ๋ฅ์ฑ ๋์
-
์ปฌ๋ผ๋ช ์ ๋ณ๊ฒฝํ๊ฑฐ๋ ์๋ก์ด ์ปฌ๋ผ์ ์ถ๊ฐํ ๋ JOIN์ด ์คํจํ๊ฑฐ๋ ์๋ชป๋ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์, ํญ์ ๋ช ์์ ์ผ๋ก INNER JOIN์ ์ฌ์ฉ
START TRANSACTION์ ํ๋๋ผ๋ LOCK TABLE ์ ์ด์ ์ ์ํ์ค์ธ ํธ๋์ญ์ ์ commit ํ๊ธฐ ๋๋ฌธ์ ์ดํ ์คํ๋ ์ฟผ๋ฆฌ๊ฐ ๋กค๋ฐฑ๋์ง ์์
์ฐธ๊ณ : http://dev.mysql.com/doc/refman/5.0/en/lock-tables-and-transactions.html