원본출처 : http://www.openphp.com/board/board_center.html?Type=View&tb_name=board_mysql_tip&id=2&start=0&id_no=2
안녕 하세요? 조성준입니다
음냐
소형이아닌 중소정도규모의 디비설계시에는
항상 테이블을 여러가지고 짤라 놓는게
상택이죠. 시스템 부하면에선,ㄴ C하시는 분은 아실겁니다.
그렇다 보니 쪼개진 테이블간에 왜래키라는것을
설정해 항상 연결 고리를 걸어 놓지 않으면
JOin이나 데이타 Delete UPdate 부분에 문제가 있지요.
먼저 MySQL에서는 Foreign Keys 설정이 가능 하다
사용이나 POstgresSQL: 보다는 좀 못하지만 그래도 ㅂ편한 정도 입니다
POstgres의 경우 CASADE로 Triger를 설정하면
오래키로 묻어 둔것이 DELETE나 UPDATE시
연결된 모든 테이블에 대해 동시적으로 작동하니
좀더 무결성을 위한다면 MySQL보다는 POstgreSQL을 쓰셔용
CREATE TABLE persons (
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
name CHAR(60) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE shirts (
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
style ENUM(\t-shirt\, \polo\, \dress\) NOT NULL,
color ENUM(\red\, \blue\, \orange\, \white\, \black\) NOT NULL,
owner SMALLINT UNSIGNED NOT NULL REFERENCES persons,
PRIMARY KEY (id)
);
INSERT INTO persons VALUES (NULL, \Antonio Paz\);
INSERT INTO shirts VALUES
(NULL, \polo\, \blue\, LAST_INSERT_ID()),
(NULL, \dress\, \white\, LAST_INSERT_ID()),
(NULL, \t-shirt\, \blue\, LAST_INSERT_ID());
INSERT INTO persons VALUES (NULL, \Lilliana Angelovska\);
INSERT INTO shirts VALUES
(NULL, \dress\, \orange\, LAST_INSERT_ID()),
(NULL, \polo\, \red\, LAST_INSERT_ID()),
(NULL, \dress\, \blue\, LAST_INSERT_ID()),
(NULL, \t-shirt\, \white\, LAST_INSERT_ID());
SELECT * FROM persons;
+----+---------------------+
| id | name |
+----+---------------------+
| 1 | Antonio Paz |
| 2 | Lilliana Angelovska |
+----+---------------------+
SELECT * FROM shirts;
+----+---------+--------+-------+
| id | style | color | owner |
+----+---------+--------+-------+
| 1 | polo | blue | 1 |
| 2 | dress | white | 1 |
| 3 | t-shirt | blue | 1 |
| 4 | dress | orange | 2 |
| 5 | polo | red | 2 |
| 6 | dress | blue | 2 |
| 7 | t-shirt | white | 2 |
+----+---------+--------+-------+
SELECT s.* FROM persons p, shirts s
WHERE p.name LIKE \Lilliana%\
AND s.owner = p.id
AND s.color <> \white\;
+----+-------+--------+-------+
| id | style | color | owner |
+----+-------+--------+-------+
| 4 | dress | orange | 2 |
| 5 | polo | red | 2 |
| 6 | dress | blue | 2 |
+----+-------+--------+-------+
위는 MySQL최신 문서에 있는 것입니다
요즘 간혹 메일로 물어 오려서 기재 합니다
그럼 문의는 Q&A에 주세요
|